mysql:14608
From: nobu <nobu <mininobu@xxxxxxxxxx>>
Date: Wed, 30 Jul 2008 11:30:32 +0900
Subject: [mysql 14608] 2段階以上の外部結合のやり方
近藤(nobu)と申します。
MySQLでの外部結合の方法について、質問があります。
今、次のようなSQLがあります。
SELECT
rh1.id,
rh1.recipe_name,
rh1.category,
cg.category_name,
rh1.image,
rm.id as mid,
rm.no as mno,
rm.material,
rm.unit_id,
ut.unit_name
FROM
recipe_header rh1 left outer join category cg on
(rh1.category = cg.id)
left outer join recipe_material rm on (rh1.id = rm.id),
unit ut
where
rm.unit_id = ut.id
このSQLでは、"recipe_header(rh1) "と"category(cg)"、"recipe_material(rm)"を
外部結合しており、"recipe_material(rm)"と"unit(ut)"を通常の結合をしています。
今回、"recipe_material(rm)"と"unit(ut)"の結合を外部結合に変更したく、試行錯誤
したところ次のようなSQLで想定の結果が取得できました。
SELECT
rh1.id,
rh1.recipe_name,
rh1.category,
cg.category_name,
rh1.image,
rm.id as mid,
rm.no as mno,
rm.material,
rm.unit_id,
ut.unit_name
FROM
recipe_header rh1 left outer join category cg on
(rh1.category = cg.id)
left outer join recipe_material rm on (rh1.id = rm.id),
recipe_material rm2 left outer join unit ut on
(rm2.unit_id = ut.id)
where
rm.id = rm2.id
and rm.no = rm2.no
方法としては、"recipe_material(rm2)" というrecipe_materialの別名テーブルを用意
し、"recipe_material(rm2)"と"unit(ut)"外部結合させ、rmとrm2を再帰的結合すること
で実現しています。
2段以上の外部結合(ちょっと日本語おかしいかも)をする場合、このようなやり方で
よろしいのでしょうか?なんか冗長的な気がして、やり方に疑問を持っています。
検索してみたのですが、このようにテーブルを結合させるようなサンプルが見つから
なかったので、質問させて頂きました。何かご存知の方がいらっしゃいましたら、
アドバイスをお願い致します。
-> 14608 2008-07-30 11:30 [nobu <mininobu@xxxxx] 2段階以上の外部結合のやり方 14609 2008-07-30 11:44 ┗[岡本 基 <okamoto@xx] 14610 2008-07-30 11:53 ┗[IIDA Yosiaki <y-iida] 14611 2008-07-30 11:59 ┣[岡本 基 <okamoto@xx] 14612 2008-07-30 12:02 ┗[nobu <mininobu@xxxxx] 14613 2008-07-30 12:44 ┗["Shuji Watanabe" <sh] 14614 2008-07-30 12:57 ┗[nobu <mininobu@xxxxx] 14615 2008-07-30 13:51 ┗[IIDA Yosiaki <y-iida] 14616 2008-07-30 14:30 ┗["Shuji Watanabe" <sh] 14617 2008-07-30 14:51 ┣[nobu <mininobu@xxxxx] 14618 2008-07-30 14:58 ┃┗[岡本 基 <okamoto@xx] 14619 2008-07-30 17:19 ┗[chuuken kenkou <ken_]