我在一个定义不明确的表中确定一个可能的唯一键时遇到了问题。该表有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的错误吗?