仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 529|回复: 7
打印 上一主题 下一主题

[学习教程] MYSQL教程之用distinct在MySQL中查询多条不反复纪录值

[复制链接]
乐观 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 20:13:15 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
曾经的功能列表可能会迅速变得过时了。而且,有些功能对有的应用程序非常重要,但是对别的应用程序则不一定。在利用MySQL时,偶然必要查询出某个字段不反复的纪录,固然mysql供应有distinct这个关头字来过滤失落过剩的反复纪录只保存一条,但常常只用它来前往不反复纪录的条数,而不是用它来前往不重纪录的一切值。其缘故原由是distinct只能前往它的方针字段,而没法前往别的字段,这个成绩让我困扰了好久,用distinct不克不及办理的话,我只要用二重轮回查询来办理,而如许关于一个数据量十分年夜的站来讲,无疑是会间接影响到效力的。以是我花了良多工夫来研讨这个成绩,网上也查不到办理计划,时代把伴侣拉来协助,了局是我们两人都忧郁了!

上面先来看看例子:

table
idname
1a
2b
3c
4c
5b

库布局也许如许,这只是一个复杂的例子,实践情形会庞大很多。

好比我想用一条语句查询失掉name不反复的一切数据,那就必需利用distinct往失落过剩的反复纪录。

selectdistinctnamefromtable
失掉的了局是:

name
a
b
c

仿佛到达效果了,但是,我想要失掉的是id值呢?改一下查询语句吧:

selectdistinctname,idfromtable

了局会是:

idname
1a
2b
3c
4c
5b

distinct怎样没起感化?感化是起了的,不外他同时感化了两个字段,也就是必需得id与name都不异的才会被扫除……

我们再改改查询语句:

selectid,distinctnamefromtable

很遗憾,除毛病信息你甚么也得不到,distinct必需放在开首。难到不克不及把distinct放到where前提里?能,还是报错。。。。。。。

很贫苦吧?的确,费经心思都没能办理这个成绩。没举措,持续找人问。

拉住公司里一java程序员,他给我演示了Oracle里利用distinct以后,也没找到mysql里的办理计划,最初上班之前他倡议我尝尝groupby。

试了半天,也不可,最初在mysql手册里找到一个用法,用group_concat(distinctname)共同groupbyname完成了我所必要的功效,镇静,天助我也,从速尝尝。

报错。。。。。。。。。。。。忧郁。。。。。。。连mysql手册也跟我过不往,先给了我但愿,然后又把我推向扫兴,好狠哪。。。。

再细心一查,group_concat函数是4.1撑持,晕,我4.0的。没举措,晋级,升完级一试,乐成。。。。。。

终究弄定了,不外如许一来,又必需请求客户也晋级了。

俄然灵机一闪,既然可使用group_concat函数,那别的函数能行吗?

赶忙用count函数一试,乐成,我。。。。。。。想哭啊,费了这么多光阴。。。。。。。。本来就这么复杂……

如今将完全语句放出:

select*,count(distinctname)fromtablegroupbyname

了局:

idnamecount(distinctname)
1a1
2b1
3c1

最初一项是过剩的,不必管就好了,目标到达。

唉,本来mysql这么笨,悄悄一下就把他骗已往了,忧郁也就我吧(对了,另有容容那家伙),如今拿出来但愿人人不要被这成绩折腾。

哦,对,再特地说一句,groupby必需放在orderby和limit之前,否则会报错.
更忧郁的事变产生了,在筹办提交时容容发明,有更复杂的办理办法:

selectid,namefromtablegroupbyname

看来对mysql的懂得仍是太浅薄了,不怕被笑话,收回来让人人别犯一样的毛病。
这一切听起来不错,无疑DBaaS具有很多相对于RDBMS的优势。然而MySQL学习教程,DBaaS也有其局限性,云服务中固有的局限性就是之一。当客户开始将数据放入云端时,他们会遭遇到无法控制的网络性能问题。
飘飘悠悠 该用户已被删除
沙发
发表于 2015-1-24 16:01:32 | 只看该作者
学习SQL语言的话如果要学会去做网站就不是很难!但是要做数据库管理的话就有难度了!
小妖女 该用户已被删除
板凳
发表于 2015-2-2 10:25:57 | 只看该作者
总感觉自己还是不会SQL
深爱那片海 该用户已被删除
地板
发表于 2015-2-7 18:07:12 | 只看该作者
如果我们从集合论(关系代数)的角度来看,一张数据库的表就是一组数据元的关系,而每个SQL语句会改变一种或数种关系,从而产生出新的数据元的关系(即产生新的表)。
透明 该用户已被删除
5#
发表于 2015-2-22 22:11:42 | 只看该作者
SQLServer的异构移植功能个人感觉最好了。(如果对比过SQLServer的链接服务器和Oracle的透明网关的朋友会发现SQLServer的sp_addlinkedserver(openquery)异构数据库系列比Oracle真是强太多了。)
谁可相欹 该用户已被删除
6#
发表于 2015-3-7 04:03:53 | 只看该作者
所以你总能得到相应的升级版本,来满足你的需求。
若相依 该用户已被删除
7#
发表于 2015-3-14 11:46:35 | 只看该作者
数据库物理框架没有变动undo和redo都放在数据库得transaction中,个人感觉是个败笔。如果说我们在设计数据库的时候考虑分多个数据库,可能能在一定程度上避免I/O效率问题。
山那边是海 该用户已被删除
8#
发表于 2015-3-21 06:49:03 | 只看该作者
始终遗憾SQLServer的登陆无法分配CPU/内存占用等指标数。如果你的SQLServer给别人分配了一个只可以读几个表的权限,而这个家伙疯狂的死循环进行连接查询,会给你的系统带来很大的负担。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-11-15 11:01

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表