我有一个定义表,我知道它没有得到很好的维护,让我们称之为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
Run Code Online (Sandbox Code Playgroud)
我想要表B中的所有行,表B中的ID不存在于表A中.这不仅仅匹配表A中的行; 我只想要表B中的行,其中表A中根本不存在ID.
gdo*_*ica 135
SELECT *
FROM B
WHERE NOT EXISTS (SELECT 1
FROM A
WHERE A.ID = B.ID)
Run Code Online (Sandbox Code Playgroud)
Dan*_*kyy 23
几乎在每个环境中都有的经典答案是
SELECT ID, Name, blah, blah
FROM TableB TB
LEFT JOIN TableA TA
ON TB.ID=TA.ID
WHERE TA.ID IS NULL
Run Code Online (Sandbox Code Playgroud)
有时不是EXISTS可能没有实现(不工作).
Abe*_*ler 13
如果您使用EXISTS设置,则可以在SQL Server中使用以下内容:
SELECT * FROM TableB as b
WHERE NOT EXISTS
(
SELECT * FROM TableA as a
WHERE b.id = a.id
)
Run Code Online (Sandbox Code Playgroud)
小智 11
这也有效
SELECT *
FROM tableB
WHERE ID NOT IN (
SELECT ID FROM tableA
);
Run Code Online (Sandbox Code Playgroud)