我有两张表,大约相差3000条记录
select count(name) from t1
返回 1847073
select count(name) from t2
返回 1813492
但是当我尝试获取一个不在另一个中的结果时,我只会得到空结果。
select t1.name from t1 where t1.name not in (select t2.name from t2);
我也尝试过左连接与左边有更多记录的表,它永远运行
select t1.name from t1 left join t2 on t1.name = t2.name where t2.name is null
最佳答案
你的表 t1
可能有一些重复的名字,所以它比表 t2
有更多的记录是完全没问题的,但仍然是 t1< 中的所有名字
也出现在 t2
中。
但您还应该考虑这样一个事实,即某些名称在表 t1 中可能为 NULL,并且由于 NULL NOT IN (....)
将被评估为 NULL,因此不会显示它们除非你添加一个明确的条件:
OR t1.name IS NULL;
但为了符合 SQL 标准,IN
/NOT IN
不仅在左侧表达式为 NULL 时返回 NULL
, 但如果在列表中没有找到匹配项并且列表中的表达式之一为 NULL,并且您还需要从 NOT IN 子查询中排除 NULL 名称:
SELECT t1.name
FROM t1
WHERE
t1.name NOT IN (SELECT t2.name FROM t2 WHERE t2.name IS NOT NULL)
OR t1.name IS NULL;
您的第二个查询看起来不错,但您可能错过了两个表中名称列的索引。
关于mysql - mysql中的比较查询没有返回正确的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20203529/