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_]