10秒目をつむったら…

テーブルAとテーブルBがあり、両方に存在しないものを抽出してエラーとする処理を行いたいのですが、
どういうSQlを書いたらいいのか教えてください。
下記例としてテーブルにデータがあったとしたら、結果として
004 商品D
005 商品E
006 商品G
というデータを抽出したいのですが・・

テーブルA             テーブルB
-------------        -----------------------
コード  商品名 NO コード   商品名
001商品A        1 001 商品A
002商品B        2 001  商品A
003商品C        3 002   商品B
004商品D        4 003 商品C
006商品G        5 003 商品C
                6 005 商品E

A 回答 (3件)

ちょっと試したことがないのでわかりませんが、次のようなのはどうでしょう



(select キー1,キー2 from A
minus
select キー1,キー2 from B)
union
(select キー1,キー2 from B
minus
select キー1,キー2 from A)
    • good
    • 0

条件にもよりますが、not inよりもnot existのほうが処理速度が速くなるときがありますよ。

(索引データ件数による)
    • good
    • 0
この回答へのお礼

すいません!
やってみたのですが、エラーが出て動きません!
GROUP BYで式が設定されていませんとなってしまいます。(BYオラクル)
又、キーが例では、1項目だけだったのですが、複数で成り立つ場合も作りたいので合わせて教えてください。

お礼日時:2001/02/14 16:46

select * from テーブルA


where コード not in (select コード from テーブルB)
union
select * from テーブルB
where コード not in (select コード from テーブルA)
Group by 1,2
order by 1

環境によってマチマチではないかと思うのですが
(order by 1 が使えないとか・・・・)
算出するSQL概念はこれでいいかと思います。
    • good
    • 0
この回答へのお礼

ありがとうございました。
私は、NOT EXISTSを考えたのですが、ご回答頂いた方が効率がいいみたいですね。助かりました! さっそく使わせて頂きます。

お礼日時:2001/02/02 12:48

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