アプリ版:「スタンプのみでお礼する」機能のリリースについて

以下のような2つのテーブルがあったとして、
2つともに存在する「店コード」を抽出するのはSQLは分かるのですが、
片方に存在しない「店コード」(以下の例の場合、「2」)を抽出するSQLを
一文で書くにはどうすればいいのでしょうか?

<店テーブル>
店コード住所・・・(その他、基本情報)
1aaa
2bbb
3ccc

<販売テーブル>
店コード販売品目・・・(その他、販売数など)
1xxx
3zzz

A 回答 (3件)

オプティマイザ次第だけど、NOT-INは、あまりお勧めでない。


外部結合も索引があっても有効に使われないので、お勧めでない。

select * from A where not exists(select 1 from B where A.店コード=B.店コード);
    • good
    • 26
この回答へのお礼

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

お礼日時:2007/01/19 17:24

NOT INを使えばいいと思います。


こんな感じかな?
SELECT * FROM 店テーブル,販売テーブル WHERE 店テーブル.店コード NOT IN (販売テーブル.店コード)
    • good
    • 3
この回答へのお礼

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

お礼日時:2007/01/19 17:23

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

ーブル.店コード WHERE 販売テーブル.店コード Is Null;

この回答への補足

ご回答ありがとうございます。
IS NULLを使えばよかったんですね。
ただ・・・、すみません、「例」と「実際」とで、違っていました。

<店テーブル>
店コード 住所・・・(その他、基本情報)
1 aaa
2 aaa
3 bbb

<販売テーブル>
店コード 販売品目・・・(その他、販売数など)
1 xxx
3 xxx
1 yyy
2 yyy

上の例で、店の住所aaa、なおかつ、販売品目xxxを扱っていない店を抽出したいのです。つまり、「2」を出したい訳です。
条件が変わってしまってすみません。

補足日時:2007/01/19 12:33
    • good
    • 1
この回答へのお礼

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

お礼日時:2007/01/19 18:51

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

関連するカテゴリからQ&Aを探す