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

我有一个我知道没有被很好地维护的定义表,让我们称这个table A 我有另一个表(称为table B ),它是小得多,理想情况下应该是subset of table Asubset 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中。

 SELECT * FROM B WHERE NOT EXISTS (SELECT 1 FROM A WHERE A.ID = B.ID) 

如果您使用EXISTS设置,则可以在SQL Server中使用以下内容:

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

几乎在每个环境中都可行的经典答案是

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

有时不存在可能没有实现(不工作)。

或者如果“不存在”没有被执行

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