web-dev-qa-db-ja.com

sql:テーブルAのエントリがテーブルBに存在するかどうかを確認します

あまりよく管理されていないことがわかっている定義テーブルがあります。これをtable Aと呼びましょう。私は別のテーブル(table Bと呼びます)を持っていますが、それははるかに小さく、理想的にはsubset of table Aであるはずですが、table Aはやや古く、Table Bにある新しいエントリを含んでいません。

テーブルAとBには異なる列があることに注意してください。

Table A:
ID, Name, blah, blah, blah, blah

Table B:
ID, Name

テーブルBのIDがテーブルAに存在しないように、テーブルBのすべての行が必要です。これは、テーブルAの行に一致するだけではありません。表AにIDがまったく存在しない表Bの行のみが必要です。

60
codingknob
SELECT *
FROM   B
WHERE  NOT EXISTS (SELECT 1 
                   FROM   A 
                   WHERE  A.ID = B.ID)
128
gdoron

ほとんどすべての環境で機能する古典的な答えは

SELECT ID, Name, blah, blah
FROM TableB TB
LEFT JOIN TableA TA
ON TB.ID=TA.ID
WHERE TA.ID IS NULL

nOT EXISTSが実装されていない(動作していない)場合があります。

21

EXISTSを使用するように設定されている場合、SQL Serverで以下を使用できます。

SELECT * FROM TableB as b
WHERE NOT EXISTS
(
   SELECT * FROM TableA as a
   WHERE b.id = a.id
)
13
Abe Miessler

または「NOT EXISTS」が実装されていない場合

SELECT *
FROM   B
WHERE (SELECT count(*)  FROM   A WHERE  A.ID = B.ID) < 1
0
Daflanck