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