[前][次][番号順一覧][スレッド一覧]

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