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

标签 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 

最佳答案

你的表 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/

相关文章:

mysql - 如何根据另一个表中的列和原始表中的列对表中的值进行排序?

sql - 具有多种数据类型的动态数据透视表

mysql - 最优二元线性回归计算

sql - 数据库中已经有一个名为 '#columntable' 的对象

mysql - 我的 mysqldbcopy 语法有什么问题?

PHP 短标签未按预期工作

MySQL INNER JOIN 使用

sql - 我们可以通过一个查询从具有公共(public) id 的五个表中获取数据吗?

mysql - 错误代码 : 1054. 'sdate' 中的未知列 'where clause'

mysql - 可以在 MySQL 中不使用定界符创建过程吗?