问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

HQL语句 distinct 的用法是什么?

发布网友 发布时间:2022-05-06 02:32

我来回答

2个回答

懂视网 时间:2022-05-06 06:54

mysql提供distinct 来过滤掉多余的重复记录只保留一条在使用mysql时,有时需要查询出某个字段不重复的记录,虽然mysql提供有dist

mysql提供distinct 来过滤掉多余的重复记录只保留一条

在使用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之前,不然会报错,差不多了,发给容容放网站上去,我继续忙碌。。。。。。

更郁闷的事情发生了,在准备提交时容容发现,有更简单的解决方法。

select id, name from table group by name

看来对mysql的了解还是太肤浅了,不怕被笑话,发出来让大家别犯同样的错误。

linux

热心网友 时间:2022-05-06 04:02

1、distinct这个关键字用来过滤掉多余的重复记录只保留一条,但往往只用它来返回不重复记录的条数,而不是用它来返回不重记录的所有值。其原因是distinct只有用二重循环查询来解决,而这样对于一个数据量非常大的站来说,无疑是会直接影响到效率的。

2、distinct的只显示一次重复出更的值。 不过这个值出现多少次只显示一次。 select distinct 字段名1,字段名2 from 表格 order by 字段名1 distinct 字段名1 意思是只显示一次字段名1显示的是第一次出现的。 最好和order by 结合使用。

3、表中包含有若干列数据,现在想用某一列进行distinct操作,但是还想在结果中输出所有的列,只要对该列distinct就可以,比如是列test1,表是table,select * from table where test1 in(select distinct(test1) from table)。

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
win7窗口淡入淡出慢 iPhone 小技巧:如何将 Safari 浏览器中的网页添加到桌面? 锰粉是什么颜色的金属 铁精粉的常见颜色是什么 烟花爆竹中的金属粉末如何使其呈现绚丽色彩? 金粉有哪些种类 灰土每层回填最大厚度 灰土基础简史 如何让一个喜欢你的女孩讨厌你! 西环里新区基本资料 内蒙古人所说的“风季”是哪个季节 英国一年四季气候?? 内蒙古人俗称风季是哪个季节 内蒙古人所说的“风季”是哪个季节? 澳大力亚4月份是什么季节呢? 澳大利亚有几个季节? spc管制图里的cpk代表什么 请问FMEA,Spc,Cpk,Control plan,6Sigma的应用场合分别是什么,谢谢。 关于SPC cpk和ppk的几点疑问 SPC性能指数Ppk和能力指数Cpk的区别 怎样最简单易懂地解释spc和cpk的关系和各自作用,让外行人也一看就懂的? spc和cpk的有关知识? ppt spc和cpk的区别 CPK和SPC有什么关系 怎样做免费的QQ空间背景(大图) 男生为什么喜欢冷暴力? 男生在恋爱中冷暴力要怎么解决? 男人冷暴力该怎么办? 遭遇男人的冷暴力,怎么办? 对于冷暴力的男人该怎么办 什么牌子的面膜既便宜又好用? 哪个牌子的补水面膜效果最好?价格200以内,比较好买的 哪种牌子面膜补水效果好 法兰琳卡芦荟黄瓜保湿面膜适合什么年龄用 什么牌子的面膜美白补水效果好 美白补水祛斑哪个牌子好 敷黄瓜面膜好呢还是买的那种面膜好呢?为什么呢? 春天适合用什么面膜品牌? 5e能换库存吗 steam受限5e买的饰品能进库存吗 5e抽的枪怎么放仓库 cs库存修改器会vac吗 5e最慢多少天军需库存发货 每天的感恩日记怎么写 感恩日记五十字 . 关于感恩的日记怎么写 求感恩日记10篇!!!急~~~ 《感恩日记》怎么写(例文一篇) 3篇感恩日记 求一篇关于感恩的日记拜托了各位 谢谢