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

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