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