我在确定一个定义不明确的表中可能的唯一键时遇到了问题。该表有 5000 行。我在我认为可能是唯一键的字段上选择了 distinct。
select count(distinct col1, col2)
from tab1;
结果是 4980 条记录。然后我检查了 20 条记录,发现 col2 的值为空,但添加 col3 应该给我唯一性。
select count(distinct col1, col2, col3)
from tab1;
结果还是4980,啥?所以我将查询更改为此。
select col1, col2, col3, count(*)
from tab1
group by col1, col2, col3
having count(*) > 1;
有了这个,我得到了零行,所以 col1、col2 和 col3 是唯一的。那么前三列查询有什么问题呢?我试过了。
select count(distinct col1, coalesce(col2, ''), col3)
from tab1;
这返回了 5000 条记录。
很可能多个字段在引擎中的一个字段中连接在一起,并且连接 col1、NULL、col3 会导致 NULL,这就是它以这种方式运行的原因。但是,结果似乎打破了 MySQL 似乎想要遵循的 NULL 标准。这是 MySQL 错误吗?
最佳答案
manual具体说 COUNT(DISTINCT expr [,expr...])
Returns a count of the number of rows with different non-NULL expr values.
这是您看到的行为。
关于mysql - 计数时 MySQL 是否正确处理空值(不同的 col1、col2、col3),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49522791/