2012-04-30 24 views
1

私は3つのOracleテーブルを持っています。 AはBに参加し、Bは、私は、対応するレコードが、私はこのようなクエリを書いBまたはCに存在するかどうかのirerspectiveからすべてのレコードを望んCに結合します。oracle outer join query

select a.name from a,b,c where a.a_id = b.b_id(+) and b.b_id = c.c_id(+) 

このクエリは私に権利いないようです特に2回目の参加でAにレコードがあり、それに対応してBとCのレコードがない場合は、正確に何が起こりますか?それでもレコードを取得できますか?

何らかの理由で上記のクエリで同じレコード数が返されますselect a.name from a だから私はクエリが正しいと推測していますか?また、クエリを書き換えるための良い方法がありますか?

+0

行が一致するidを持つ任意の行があるかどうかに関係なく返されますが期待したように、より良いクエリは

Select a.name from A a left join B b on a.a_id=b.b_id inner join C c on b.b_id=c.c_id 

これは結果を与える必要がありますすることができ推測しますbまたはcで。 id 1の場合には、a行、c行、b行は存在しません。 b.b_idはnullです...試してみてください。 – joshp

+0

ありがとうございます。 aのid 1の場合、b行がない場合、c行はどのようになりますか? cはaと直接関係がありません。少し説明していただけますか? – Victor

+0

あなたはそれを持っています。 b行は存在しないので、b行のb行が存在していてもb行b列はnullではありません。この種の結合を書くときに考慮してください。 – joshp

答えて