• ベストアンサー

3つの表の外部結合

表A、B、Cの3つがあり、Aのすべての行を出力したいと考えています。 外部結合を用いるのだとは思うのですが、3つの表に対して行う場合の 書き方がわからず困っています。 ご教授いただけないでしょうか? select * from a,b,c where a.商品ID =b.商品ID (+) and b.商品ID (+) =c.商品ID (+) としてみましたが、うまくいきませんでした。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.3

ansi構文の趣旨からいえば、結合条件と絞り込み条件は分けて書くので・・ select * from a left join b on (a.商品ID =b.商品ID) left join c on (b.商品ID =c.商品ID) where a.年月 = 任意の値 と書くのが一般的でしょうね。

その他の回答 (2)

回答No.2

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)

noname#32335
質問者

お礼

ありがとうございます。 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.年月 = 任意の値 とすれば良いのでしょうか?

  • erupi1973
  • ベストアンサー率75% (27/36)
回答No.1

DBエンジンにより異なるかもしれませんが、確かOracleでは素直な方法でこのような事は出来なかったと思います。 例えば、副問い合わせを使ってこのようなやり方はどうでしょうか。 試してないので間違ってたらすみません.... select * from a, (select * from b, c where b.商品ID = c.商品ID (+)) as ab where a.商品ID = b.商品ID (+)

関連するQ&A