MySQL在计数时是否正确处理空值(不同的col1,col2,col3)

时间:2018-03-27 21:35:43

标签: mysql count distinct multiple-columns

我在一个定义不明确的表中确定一个可能的唯一键时遇到了问题。该表有5000行。我选择了我认为可能是一个独特键的字段。

select count(distinct col1, col2)
from tab1;

结果是4980条记录。然后我检查了20条记录,发现col2的值为null,但是添加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的错误吗?

1 个答案:

答案 0 :(得分:1)

manual明确指出COUNT(DISTINCT expr [,expr...])

  

返回具有不同非NULL expr值的行数。

这是你所看到的行为。