プロが教えるわが家の防犯対策術!

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

A 回答 (3件)

ansi構文の趣旨からいえば、結合条件と絞り込み条件は分けて書くので・・



select *
from a
left join b on (a.商品ID =b.商品ID)
left join c on (b.商品ID =c.商品ID)
where a.年月 = 任意の値

と書くのが一般的でしょうね。
    • good
    • 28

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)
    • good
    • 11
この回答へのお礼

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

お礼日時:2006/12/28 12:32

DBエンジンにより異なるかもしれませんが、確かOracleでは素直な方法でこのような事は出来なかったと思います。



例えば、副問い合わせを使ってこのようなやり方はどうでしょうか。
試してないので間違ってたらすみません....

select *
from a, (select * from b, c where b.商品ID = c.商品ID (+)) as ab
where a.商品ID = b.商品ID (+)
    • good
    • 4

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す