[ 路丁前言 ] 在应用mysql时,有时候必须查寻出某一字段名不反复的纪录,尽管mysql出示有distinct这一关键词来过虑掉不必要的重复记录只保存一条,但通常仅用它来回到不重复记录的总数,而不是用它来回到不重纪录的全部值。
其缘故是distinct只有回到它的总体目标字段名,而没法回到其他字段名,这个问题要我困惑了好长时间,用distinct不可以处理得话,我仅有用二重循环系统查寻来处理,而那样针对一个信息量十分大的站而言,毫无疑问是会立即危害到高效率的。所以我花了许多時间来科学研究这个问题,在网上也查不出解决方法,期内把容容拉来帮助,結果是大家两个人都烦闷了
下边先讨论一下事例:
table
id name
1 a
2 b
3 c
4 c
5 b
库构造大约那样,这仅仅一个简易的事例,具体情况会繁杂得多。
例如我觉得用一条句子查寻获得name不反复的全部数据信息,那么就务必应用distinct除掉不必要的重复记录。
1
select distinct name from table
获得的結果是:
name
a
b
c
仿佛达到效果了,但是,我要获得的是id值呢?改一下查寻句子吧:
select distinct name, id from table
結果会是:
id name
1 a
2 b
3 c
4 c
5 b
distinct如何没起功效?功效是起了的,但是他另外功效了2个字段名,也就是务必得id与name都同样的才会被清除。。。。。。。
大家再修改查寻句子:
select id, distinct name from table
很遗憾,除开错误报告你什么也无法得到,distinct务必放到开始。难到不可以把distinct放进where标准里?能,仍然出错。。。。。。。
很不便吧?的确,费尽心机都没能处理这个问题。没法,再次请人问。
拉住企业里一JAVA程序猿,他帮我演试了oracle里应用distinct以后,也没找到mysql里的解决方法,最终下班了以前他提议我试试group by。
试了大半天,也不好,最终在mysql指南里寻找一个使用方法,用group_concat(distinct name)相互配合group by name完成了我所必须的作用,激动,mc天佑因为我,赶紧试一下。
出错。。。。。。。。。。。。烦闷。。。。。。。连mysql指南也跟我走不过去,先给了希望,随后又将我引向心寒,好狠哪。。。。
再细心一查,group_concat涵数是4.1适用,晕,我4.0的。没法,升級,升完级一试,取得成功。。。。。。
总算拿下了,但是这样一来,又务必规定顾客也升級了。
忽然灵机一闪,即然能够应用group_concat涵数,那其他涵数能可以吗?
赶快用count涵数一试,取得成功,我。。。。。。。心里难受啊,费了这么多时间。。。。。。。。原先就那么简易。。。。。。
如今将详细句子释放:
select *, count(distinct name) from table group by name
結果:
id name count(distinct name)
1 a 1
2 b 1
3 c 1
之上便是SQL中有关distinct关键词的四种使用方法的详尽內容
评论