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

时间:2013-11-25 21:18:39

标签: 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 join t2 on t1.name = t2.name where t2.name is null 

2 个答案:

答案 0 :(得分:2)

您的表t1可能有一些重复的名称,因此它的记录数比表t2更多,但t1中的所有名称仍然存在于t2中。 1}}。

但是您还应该考虑这样一个事实,即表t1中的某些名称可能为NULL,并且由于NULL NOT IN (....)将被评估为NULL,因此除非您添加显式条件,否则它们将不会显示:

OR t1.name IS NULL;

但是为了符合SQL标准,IN / NOT IN不仅返回NULL左侧的表达式为NULL,而且如果在list和列表中的一个表达式为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;

您的第二个查询看起来很好,但您可能会错过两个表上名称列的索引。

答案 1 :(得分:0)

这有用吗?

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