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

cod*_*nob 63 sql exists

我有一个定义表,我知道它没有得到很好的维护,让我们称之为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)

  • `select*from TableB b其中b.ID不在(从TableA a中选择a.ID)` (7认同)
  • @vakio感谢您的查询。您绝对应该把您的评论作为答案。 (2认同)
  • @ManosKounelakis,“选择1”表示返回“ 1”作为每一行的结果。通常用它来表示结果无关紧要,但仅存在是重要的。您可以将“ 1”更改为每个有效值(*,1、2、3,column1,column2),并且结果不会更改。 (2认同)

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可能没有实现(不工作).

  • 此查询比 SELECT * FROM B WHERE NOT EXISTS (SELECT 1 FROM A WHERE A.ID = B.ID) 更高效 (3认同)
  • 比不存在更快 (2认同)

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)