mysql:14609
From: 岡本 基 <岡本 基 <okamoto@xxxxxxxxxx>>
Date: Wed, 30 Jul 2008 11:44:03 +0900
Subject: [mysql 14609] Re: 2段階以上の外部結合のやり方
岡本と申します。 確認はしてませんが、こういう事ですかね・・・・? 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, category cg, recipe_material rm, recipe_material rm2, unit ut WHERE rh1.category = cg.id (+) AND rh1.id = rm.id (+) AND rm2.unit_id = ut.id (+) AND rm.id = rm2.id AND rm.no = rm2.no On Wed, 30 Jul 2008 11:30:32 +0900 nobu <mininobu@xxxxxxxxxx> wrote: > 近藤(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段以上の外部結合(ちょっと日本語おかしいかも)をする場合、このようなやり方で > よろしいのでしょうか?なんか冗長的な気がして、やり方に疑問を持っています。 > > 検索してみたのですが、このようにテーブルを結合させるようなサンプルが見つから > なかったので、質問させて頂きました。何かご存知の方がいらっしゃいましたら、 > アドバイスをお願い致します。 > *-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-* 岡本 基 Motoki Okamoto okamoto@xxxxxxxxxx 株式会社エアネット SIサービスグループ 東京都品川区北品川1-10-4 Y.Bビル 4F ※引越ししました。 TEL:03-6717-5710(代表) 03-6717-5765(直通) FAX:03-6717-5711 *-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
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_]