• ベストアンサー

SQL文について(片方のテーブルに存在しないレコード抽出)

以下のような2つのテーブルがあったとして、 2つともに存在する「店コード」を抽出するのはSQLは分かるのですが、 片方に存在しない「店コード」(以下の例の場合、「2」)を抽出するSQLを 一文で書くにはどうすればいいのでしょうか? <店テーブル> 店コード 住所・・・(その他、基本情報) 1 aaa 2 bbb 3 ccc <販売テーブル> 店コード 販売品目・・・(その他、販売数など) 1 xxx 3 zzz

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

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

オプティマイザ次第だけど、NOT-INは、あまりお勧めでない。 外部結合も索引があっても有効に使われないので、お勧めでない。 select * from A where not exists(select 1 from B where A.店コード=B.店コード);

pon_yuta
質問者

お礼

ご回答ありがとうございました。 結局、not existsを使用し、無事に目的通りのことができました。

その他の回答 (2)

noname#219128
noname#219128
回答No.2

NOT INを使えばいいと思います。 こんな感じかな? SELECT * FROM 店テーブル,販売テーブル WHERE 店テーブル.店コード NOT IN (販売テーブル.店コード)

pon_yuta
質問者

お礼

ご回答ありがとうございました。 NOT INの使用も考えつきませんでした。 いろいろと勉強していきたいと思います。

  • chie65536
  • ベストアンサー率41% (2512/6032)
回答No.1

SELECT 店テーブル.店コード FROM 店テーブル LEFT JOIN 販売テーブル ON 店テーブル.店コード = 販売テーブル.店コード WHERE 販売テーブル.店コード Is Null;

pon_yuta
質問者

お礼

最初からきちんと条件を提示すべきでした。 実際に参考にさせていただいた3番目の方を優良とさせてもらいました。 申し訳ありませんでした。

pon_yuta
質問者

補足

ご回答ありがとうございます。 IS NULLを使えばよかったんですね。 ただ・・・、すみません、「例」と「実際」とで、違っていました。 <店テーブル> 店コード 住所・・・(その他、基本情報) 1 aaa 2 aaa 3 bbb <販売テーブル> 店コード 販売品目・・・(その他、販売数など) 1 xxx 3 xxx 1 yyy 2 yyy 上の例で、店の住所aaa、なおかつ、販売品目xxxを扱っていない店を抽出したいのです。つまり、「2」を出したい訳です。 条件が変わってしまってすみません。

関連するQ&A