- ベストアンサー
SQL文について(片方のテーブルに存在しないレコード抽出)
以下のような2つのテーブルがあったとして、 2つともに存在する「店コード」を抽出するのはSQLは分かるのですが、 片方に存在しない「店コード」(以下の例の場合、「2」)を抽出するSQLを 一文で書くにはどうすればいいのでしょうか? <店テーブル> 店コード 住所・・・(その他、基本情報) 1 aaa 2 bbb 3 ccc <販売テーブル> 店コード 販売品目・・・(その他、販売数など) 1 xxx 3 zzz
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
オプティマイザ次第だけど、NOT-INは、あまりお勧めでない。 外部結合も索引があっても有効に使われないので、お勧めでない。 select * from A where not exists(select 1 from B where A.店コード=B.店コード);
その他の回答 (2)
NOT INを使えばいいと思います。 こんな感じかな? SELECT * FROM 店テーブル,販売テーブル WHERE 店テーブル.店コード NOT IN (販売テーブル.店コード)
お礼
ご回答ありがとうございました。 NOT INの使用も考えつきませんでした。 いろいろと勉強していきたいと思います。
- chie65536
- ベストアンサー率41% (2512/6032)
SELECT 店テーブル.店コード FROM 店テーブル LEFT JOIN 販売テーブル ON 店テーブル.店コード = 販売テーブル.店コード WHERE 販売テーブル.店コード Is Null;
お礼
最初からきちんと条件を提示すべきでした。 実際に参考にさせていただいた3番目の方を優良とさせてもらいました。 申し訳ありませんでした。
補足
ご回答ありがとうございます。 IS NULLを使えばよかったんですね。 ただ・・・、すみません、「例」と「実際」とで、違っていました。 <店テーブル> 店コード 住所・・・(その他、基本情報) 1 aaa 2 aaa 3 bbb <販売テーブル> 店コード 販売品目・・・(その他、販売数など) 1 xxx 3 xxx 1 yyy 2 yyy 上の例で、店の住所aaa、なおかつ、販売品目xxxを扱っていない店を抽出したいのです。つまり、「2」を出したい訳です。 条件が変わってしまってすみません。
お礼
ご回答ありがとうございました。 結局、not existsを使用し、無事に目的通りのことができました。