mysql中的比较查询未返回正确结果

mysql中的比较查询未返回正确结果,mysql,sql,Mysql,Sql,我有两张表,大约有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

我有两张表,大约有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不在(…)<代码>中将被评估为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;
您的第二个查询看起来不错,但您可能在两个表的name列上都缺少索引。

这行吗

SELECT            t1.name
FROM              table1 t1
NATURAL LEFT JOIN table2 t2
WHERE             t2.name IS NULL

好的,这似乎是对的,在我添加了null之后,它给出了296条记录,这些记录的名称为null,但有其他数据。。你认为2000年以后的事情是什么?296条空记录的重复项?@EduardoDennis你说得对,不仅仅是t1中的空值,子查询也不必返回空值,请查看我的更新答案