前往顾页
以后地位: 主页 > 收集编程 > Php实例教程 >

mysql 去除反复 Select中DISTINCT关头字的用法

时候:2012-10-13 01:48来源:知行网www.zhixing123.cn 编辑:麦田守望者

在利用mysql时,偶然需求查询出某个字段不反复的记录,固然mysql供应 有distinct这个关头字来过滤失落多余的反复记录只保存一条,但常常只用它来前往不反复记录的条数,而不是用它来前往不重记录的所有值。其启事是 distinct只能前往它的目标字段,而无法前往别的字段,这个问题让我搅扰了好久,用distinct不克不及处理的话,我只需效二重循环查询来处理,而 如许对一个数据量非常年夜的站来讲,无疑是会直接影响到效力的。所以我花了很多时候来研究这个问题,网上也查不到处理计划,期间把容容拉来帮手,成果是我 们两人都愁闷了。。。。。。。。。

下面先来看看例子:

table
id name
1 a
2 b
3 c
4 c
5 b

库布局年夜概如许,这只是一个简朴的例子,实际环境会复杂很多。

比如我想用一条语句查询获得name不反复的所有数据,那就必须利用distinct去失落多余的反复记录。

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怎样没起感化?感化是起了的,不过他同时感化了两个字段,也就是必须得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实现了我所需求的服从,镇静,天佑我也,从速尝尝。

报错。。。。。。。。。。。。愁闷。。。。。。。连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

最后一项是多余的,不消管就好了,目标到达。。。。。

唉,本来mysql这么笨,悄悄一下就把他骗畴昔了,愁闷也就我吧(对了,另有容容那家伙),现在拿出来希望年夜家不要被这问题折腾。

哦,对,再趁便说一句,group by 必须放在 order by 和 limit之前,不然会报错。。。。。。。。!OK了

顶一下
(2)
100%
踩一下
(0)
0%
------分开线----------------------------
标签(Tag):数据库 MYSQL mysql数据库
------分开线----------------------------
颁发评论
请自发遵循互联网相关的政策法规,严禁公布色情、暴力、革命的谈吐。
评价:
神色:
考证码:点击我更换图片
猜你感兴趣