2008年7月30日

[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段以上の外部結合(ちょっと日本語おかしいかも)をする場合、このようなやり方で
よろしいのでしょうか?なんか冗長的な気がして、やり方に疑問を持っています。

検索してみたのですが、このようにテーブルを結合させるようなサンプルが見つから
なかったので、質問させて頂きました。何かご存知の方がいらっしゃいましたら、
アドバイスをお願い致します。


投稿者 xml-rpc : 2008年7月30日 11:30
役に立ちました?:
過去のフィードバック 平均:(0) 総合:(0) 投票回数:(0)
本記事へのTrackback: http://hoop.euqset.org/blog/mt-tb2006.cgi/75825
トラックバック
コメント
コメントする




画像の中に見える文字を入力してください。