SQL 2つのテーブルを2つのキーで結合して存在しないものを抽出するには?

ショコラ
ショコラ

SQL 2つのテーブルを2つのキーで結合して存在しないものを抽出するには?

not exists を使うといい感じにいけそうです。

もっさん先輩
もっさん先輩

例えばこちら↓。モデルテーブルの中に存在しない相場の情報を検索します。

SELECT * FROM model d
WHERE 
  AND NOT EXISTS (
    SELECT * FROM price p
    WHERE
      AND p.mkr_id = d.mkr_id
			AND p.mdl_id = d.mdl_id
  )

他にも、↓のように NOT IN を使って2つのテーブルで不足の情報を検索する際に、20万のデータを検索したところ戻ってこなかった。

SELECT cstmr_id,mail FROM cstmr WHERE cstmr_id NOT IN (SELECT cstmr_id FROM cstmr_referral)

これを↓のように書き換えることで数倍速くなった。NOT EXISTS 偉大です。NOT IN は遅い。

SELECT cstmr_id,mail FROM cstmr AS i WHERE NOT EXISTS (SELECT 1 FROM referral AS r WHERE r.cstmr_id = i.cstmr_id)

以上

Scroll to Top