T-SQL查询:不在列中的列给出了错误的结果

时间:2015-03-12 20:07:30

标签: sql sql-server tsql

我有两个表A和表B,两个表中的公共列是Name, 我想知道表A中不在表B中的名称是什么

当我这样做时:

Select Name from A where Name not in (Select Name from B)

我确信表A中有2个名字不在表B中

但结果没有返回

表A和B中的这些名称列具有相同的数据类型varchar(50)

所以我将Name列的结果和Insert复制到一个新表中并执行相同的查询,这次它返回正确的结果。这会是什么bug?

示例:

Table A
Name:
Kevin
Dexter
David 
John
Marry

Table B
Name:
Kevin
Dexter
David 

因此查询应返回'John''Marry',但它不会返回到原始表中,但会在我创建并插入的另一个表中返回。

谢谢!

3 个答案:

答案 0 :(得分:8)

NULL上可能有一个B名称,这会使每行的NOT IN为false。您应该使用NOT EXISTS代替:

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

答案 1 :(得分:1)

显然,这是因为表B中某些行的NULL值。您可以使用EXCEPT

执行所需的操作
SELECT Name FROM TableA
EXCEPT
SELECT Name FROM TableB

答案 2 :(得分:0)

SELECT a.Name
FROM TableA a
LEFT JOIN TableB b ON b.Name = a.Name
WHERE b.Name IS NULL
相关问题