我有一个我知道维护得很好的定义表,让我们调用这个table A
。我有另一个表(称之为table B
),它更小,理想情况下应该是subset of table A
,但我知道table A
有些陈旧,并且不包含{{1}中的新条目1}}。
请注意,表A和表B具有不同的列。
Table B
我想要表B中的所有行,表B中的ID不存在于表A中。这不仅仅匹配表A中的行;我只想要表B中的行,其中表A中根本不存在ID。
答案 0 :(得分:124)
SELECT *
FROM B
WHERE NOT EXISTS (SELECT 1
FROM A
WHERE A.ID = B.ID)
答案 1 :(得分:20)
几乎在每个环境中都有效的经典答案是
SELECT ID, Name, blah, blah
FROM TableB TB
LEFT JOIN TableA TA
ON TB.ID=TA.ID
WHERE TA.ID IS NULL
有时候没有EXISTS可能没有实现(不工作)。
答案 2 :(得分:13)
如果您使用EXISTS,则可以在SQL Server中使用以下内容:
SELECT * FROM TableB as b
WHERE NOT EXISTS
(
SELECT * FROM TableA as a
WHERE b.id = a.id
)
答案 3 :(得分:0)
或者如果" NOT EXISTS"未实施
SELECT *
FROM B
WHERE (SELECT count(*) FROM A WHERE A.ID = B.ID) < 1
答案 4 :(得分:0)
这也有效
all