あまりよく管理されていないことがわかっている定義テーブルがあります。これを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の行のみが必要です。
SELECT *
FROM B
WHERE NOT EXISTS (SELECT 1
FROM A
WHERE A.ID = B.ID)
ほとんどすべての環境で機能する古典的な答えは
SELECT ID, Name, blah, blah
FROM TableB TB
LEFT JOIN TableA TA
ON TB.ID=TA.ID
WHERE TA.ID IS NULL
nOT EXISTSが実装されていない(動作していない)場合があります。
EXISTSを使用するように設定されている場合、SQL Serverで以下を使用できます。
SELECT * FROM TableB as b
WHERE NOT EXISTS
(
SELECT * FROM TableA as a
WHERE b.id = a.id
)
または「NOT EXISTS」が実装されていない場合
SELECT *
FROM B
WHERE (SELECT count(*) FROM A WHERE A.ID = B.ID) < 1