繁体   English   中英

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

[英]T-SQL query: where column not in is giving wrong result

我有两个表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'但它不会在我的原始表中返回,但它会在我创建和插入的另一个表中返回。

谢谢!

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

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

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

SELECT Name FROM TableA
EXCEPT
SELECT Name FROM TableB
SELECT a.Name
FROM TableA a
LEFT JOIN TableB b ON b.Name = a.Name
WHERE b.Name IS NULL

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM