- ベストアンサー
3つの表の外部結合
表A、B、Cの3つがあり、Aのすべての行を出力したいと考えています。 外部結合を用いるのだとは思うのですが、3つの表に対して行う場合の 書き方がわからず困っています。 ご教授いただけないでしょうか? select * from a,b,c where a.商品ID =b.商品ID (+) and b.商品ID (+) =c.商品ID (+) としてみましたが、うまくいきませんでした。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
ansi構文の趣旨からいえば、結合条件と絞り込み条件は分けて書くので・・ select * from a left join b on (a.商品ID =b.商品ID) left join c on (b.商品ID =c.商品ID) where a.年月 = 任意の値 と書くのが一般的でしょうね。
その他の回答 (2)
- k_o_r_o_c_h_a_n
- ベストアンサー率55% (526/942)
3表の外部結合自体は可能ですが、起点となる表を作らないと正しく結合できません。 select * from a,b,c where a.商品ID =b.商品ID (+) and a.商品ID (+) =c.商品ID (+) とすれば、結合できるはずです。 なお、9i以降のANSI構文であれば、正しく外部結合出来たと記憶しています。 select * from a left join b on (a.商品ID =b.商品ID) left join c on (b.商品ID =c.商品ID)
- erupi1973
- ベストアンサー率75% (27/36)
DBエンジンにより異なるかもしれませんが、確かOracleでは素直な方法でこのような事は出来なかったと思います。 例えば、副問い合わせを使ってこのようなやり方はどうでしょうか。 試してないので間違ってたらすみません.... select * from a, (select * from b, c where b.商品ID = c.商品ID (+)) as ab where a.商品ID = b.商品ID (+)
お礼
ありがとうございます。 select * from a left join b on (a.商品ID =b.商品ID) left join c on (b.商品ID =c.商品ID) でなんとか目的の結果を得られそうです。 更にこの後に続けて条件をつけたいのですが、 ~ left join c on (b.商品ID =c.商品ID) and a.年月 = 任意の値 とすれば良いのでしょうか?