mysql中distinct的坑

本事例实验用表task,结构如下

 

 

 

1  Distinct 位置

单独的distinct只能放在开头,否则报错,语法错误

mysql>

 

 

现在把distinct放在开头

mysql>

 

查询成功

与其他函数使用时候,没有位置限制如下

 

 

这种情况下是正确的,可以使用。

2  Distinct用法

a.在count计算不重复的记录的时候能用到
比如

 

就是计算talbebname表中id不同的记录有多少条

b,在需要返回记录不同的id的具体值的时候可以用

比如

 

返回talbebname表中不同的id的具体的值

c.上面的情况2对于需要返回mysql表中2列以上的结果时会有歧义

比如

实际上返回的是player_id与task_id同时不相同的结果,也就是DISTINCT同时作用了两个字段,必须得player_id与task_id都相同的才被排除了,与我们期望的结果不一样,我们期望的是player_id不同被过滤

在这种情况下,distinct同时作用了两个字段,player_id,task_id

d.这时候可以考虑使用group_concat函数来进行排除,不过这个mysql函数是在mysql4.1以上才支持的
e. 其实还有另外一种解决方式,就是使用

 

虽然这样的返回结果多了一列无用的count数据(有时也许就需要这个数据)

f 同时我们还可以利用下面的方式解决b遇到的歧义问题通过group by 分组

distinct 优化

发表评论

电子邮件地址不会被公开。 必填项已用*标注

This site uses Akismet to reduce spam. Learn how your comment data is processed.