检查表 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 中的所有行使表 B 中的 ID 不存在于表 A 中。这不仅仅匹配表 A 中的行; 我希望只匹配表 B 中 ID 在表 A 中根本不存在的行。

304312 次浏览
SELECT *
FROM   B
WHERE  NOT EXISTS (SELECT 1
FROM   A
WHERE  A.ID = B.ID)

If you are set on using EXISTS you can use the below in SQL Server:

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

The classical answer that works in almost every environment is

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

sometimes NOT EXISTS may be not implemented (not working).

Or if "NOT EXISTS" are not implemented

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

This also works

SELECT *
FROM tableB
WHERE ID NOT IN (
SELECT ID FROM tableA
);