• 締切済み

Oracle8での外部結合

現在、oracle8.1.7で開発しています。 T1,T2,T3の3つのテーブルがあります。 T1のデータで、T3のテーブルにまだデータが存在しないものを検索しています。 それは既にできました。 次に、条件として、  (1)T1のA,B,Cと一致し、かつFLGが5または9  (2)T1のA,B,Cと一致するデータがない。 という2点を追加しました。 しかし、以下のようにFLGが1となっているものまで検索してしまいます。   <T1>        <T2>      <T3> A:あいうえお     A:あいうえお    データ無し B:bbb        B:bbb C:ccc        C:ccc             FLG:1   ===SQL文============================================================== SELECT A,DT1,DT2 FROM T1 WHERE A LIKE 'あ%' ---追加部分---- AND ( EXISTS (SELECT A FROM T2 WHERE A=T1.A AND B=T1.B AND C=T1.C AND FLG IN (5,9)) OR NOT EXISTS (SELECT A FROM T2 WHERE A=T1.A AND B=T1.B AND C=T1.C ) ) ----ここまで---- AND NOT EXISTS (SELECT * FROM T3 WHERE KATAMEI='あ' AND NO=1) どこがいけないのでしょうか? よろしくお願いしますm(_ _)m

みんなの回答

  • jmh
  • ベストアンサー率23% (71/304)
回答No.2

exists () の中身を、選択された T1 の行の値で実行してみたら、 分かると思います。 つまり、 (a) select * from T2 where A = 'あいうえお' and B = 'bbb' and C = 'ccc' and FLG in (5, 9) (b) select * from T2 where A = 'あいうえお' and B = 'bbb' and C = 'ccc' を実行して、 (a) で行が選択されれば、それが原因、 (b) で行が選択されなければ、それが原因…だと思います。 次の select の結果は、どうですか? select * from T1, T2 where T1.A like 'あ%' and T1.A = T2.A(+) and T1.B = T2.B(+) and T1.C = T2.C(+) and decode(T2.rowid, NULL, 'X', decode(T2.FLG, 5, 'X', 9, 'X')) = 'X' and not exists (select 'X' from T3 where T3.KATAMEI = 'あ' and T3.NO = 1)

  • Zeus089
  • ベストアンサー率30% (3/10)
回答No.1

追加条件の(1)と(2)をOrで判定していますが、 追加条件はFLGの値に関係なくA,B,Cの値が一致するものは 全て不成立のような気がしますが...。 NOT EXIST (SELECT A FROM T2 WHERE A = T1.A AND B = T1.B AND C = T1.C AND FLG NOT IN (5, 9)) この式じゃ駄目ですか?

関連するQ&A