私は2つのテーブルを持っています
表A:
ID
1
2
3
4
表B:
ID
1
2
3
次の2つのリクエストがあります。
SQL Server 2000を使用しています。
NOT IN
を使用できます:
SELECT A.* FROM A WHERE ID NOT IN(SELECT ID FROM B)
ただし、その間はNOT EXISTS
を好みます:
SELECT A.* FROM A WHERE NOT EXISTS(SELECT 1 FROM B WHERE B.ID=A.ID)
他のオプションもあります。この記事では、すべての利点と欠点を非常によく説明しています。
NOT IN、OUTER APPLY、LEFT OUTER JOIN、EXCEPT、またはNOT EXISTSを使用すべきですか?
最初の質問には、少なくとも3つの一般的な方法から選択できます。
SQLは次のようになります。
SELECT * FROM TableA WHERE NOT EXISTS (
SELECT NULL
FROM TableB
WHERE TableB.ID = TableA.ID
)
SELECT * FROM TableA WHERE ID NOT IN (
SELECT ID FROM TableB
)
SELECT TableA.* FROM TableA
LEFT JOIN TableB
ON TableA.ID = TableB.ID
WHERE TableB.ID IS NULL
使用しているデータベースに応じて、それぞれのパフォーマンスは異なります。 SQL Server (null許容列ではない)の場合:
NOT EXISTSおよびNOT IN述語は、問題の両方の列がNOT NULLである限り、欠損値を検索する最良の方法です。
これはあなたの場合4を選択します
SELECT ID FROM TableA WHERE ID NOT IN (SELECT ID FROM TableB)
これはそれらを削除します
DELETE FROM TableA WHERE ID NOT IN (SELECT ID FROM TableB)
select ID from A where ID not in (select ID from B);
または
select ID from A except select ID from B;
2番目の質問:
delete from A where ID not in (select ID from B);
SELECT ID
FROM A
WHERE NOT EXISTS( SELECT 1
FROM B
WHERE B.ID = A.ID
)