2008年7月30日

[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@xxxxx> 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@xxxxx
 株式会社エアネット SIサービスグループ
 東京都品川区北品川1-10-4 Y.Bビル 4F
 ※引越ししました。
 TEL:03-6717-5710(代表)
    03-6717-5765(直通)
 FAX:03-6717-5711
*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*

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




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