SQL:如何在一个表中检查不在另一个表中的记录?

时间:2012-09-05 18:27:51

标签: sql-server exists

我想查找一个表中但不存在于另一个表中的记录。除了记录没有形成相同。所以我想确定我想用来比较的列。我以为我用以下代码解决了它,但它似乎没有工作(返回零记录)......

SELECT A.Name, A.Position, A.[Year]
  FROM TABLE A
 WHERE NOT EXISTS (

 SELECT B.Name, B.Position, B.[Year]
   FROM TABLE B
)

或者我应该通过某种加入来做这件事?感谢...

3 个答案:

答案 0 :(得分:5)

你错过了WHERE子句来比较两个表:

SELECT A.Name, A.Position, A.[Year]
  FROM TABLE A
 WHERE NOT EXISTS (

 SELECT B.Name, B.Position, B.[Year]
   FROM TABLE B
   WHERE B.Name = A.Name AND B.Position = A.Position AND B.[Year] = A.[Year]
)

答案 1 :(得分:3)

假设您想要使用所有三列进行比较,您可以使用反连接。

SELECT A.Name, A.Position, A.[Year]
  FROM TABLE_A A
     LEFT JOIN TABLE_B B
     ON a.name = b.name
         and a.position = b.position 
         and a.[Year] = b.[Year]
WHERE
   b.name is null

答案 2 :(得分:1)

您可以在表b上使用左外连接,并使用where子句查找空值。

我假设第一个查询中的所有内容都来自表A,而第二个查询中的所有内容都来自表B

Select A.Name, A.Position, A.[Year]
from A
Left Join B on A.Name = B.Name and A.Position = B.Position and A.[Year] = B.[Year]
where B.Name is Null