sql:检查表B中是否存在表A中的条目

时间:2013-04-10 23:18:52

标签: sql exists

我有一个我知道维护得很好的定义表,让我们调用这个table A。我有另一个表(称之为table B),它更小,理想情况下应该是subset of table A,但我知道table A有些陈旧,并且不包含{{1}中的新条目1}}。

请注意,表A和表B具有不同的列。

Table B

我想要表B中的所有行,表B中的ID不存在于表A中。这不仅仅匹配表A中的行;我只想要表B中的行,其中表A中根本不存在ID。

5 个答案:

答案 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