服务器之家:专注于服务器技术及软件下载分享
分类导航

Mysql|

服务器之家 - 数据库 - Mysql - 使用distinct在mysql中查询多条不重复记录值的解决办法

使用distinct在mysql中查询多条不重复记录值的解决办法

2019-10-16 13:14mysql教程网 Mysql

在使用mysql时,有时需要查询出某个字段不重复的记录,虽然mysql提供有distinct这个关键字来过滤掉多余的重复记录只保留一条,但往往只用它来返回不重复记录的条数,而不是用它来返回不重记录的所有值。其原因是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 

  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的了解还是太肤浅了,不怕被笑话,发出来让大家别犯同样的错误。。。。。。 

by 索尔 

延伸 · 阅读

精彩推荐
  • MysqlMySQL自定义函数简单用法示例

    MySQL自定义函数简单用法示例

    这篇文章主要介绍了MySQL自定义函数简单用法,结合实例形式分析了mysql自定义函数的基本定义、使用方法及操作注意事项,需要的朋友可以参考下...

    菜鸟学编程$3382019-06-12
  • MysqlMYSQL自定义函数判断是否正整数的实例代码

    MYSQL自定义函数判断是否正整数的实例代码

    这篇文章主要介绍了MYSQL自定义函数判断是否正整数 的实例代码,主要是使用正则表达式来判断,具体实例代码大家跟随小编一起通过本文学习吧...

    Insus.NET4432019-06-16
  • MysqlMysql忘记密码的几种解决方案

    Mysql忘记密码的几种解决方案

    今天小编就为大家分享一篇关于Mysql忘记密码的几种解决方案,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编...

    平而不凡3482019-06-03
  • MysqlMySQL 5.7临时表空间如何玩才能不掉坑里详解

    MySQL 5.7临时表空间如何玩才能不掉坑里详解

    这篇文章主要给大家介绍了关于MySQL 5.7临时表空间如何玩才能不掉坑里的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用mysql具有一定...

    叶师傅不会咏春拳4302019-06-26
  • MysqlMySQL查询中LIMIT的大offset导致性能低下浅析

    MySQL查询中LIMIT的大offset导致性能低下浅析

    这篇文章主要给大家介绍了关于MySQL查询中LIMIT的大offset导致性能低下的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参...

    craneyuan4712019-06-14
  • Mysql优化InnoDB表BLOB,TEXT列的存储效率

    优化InnoDB表BLOB,TEXT列的存储效率

    今天小编就为大家分享一篇关于优化InnoDB表BLOB,TEXT列的存储效率,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小...

    CODETC3712019-06-01
  • Mysqlmysql一对多关联查询分页错误问题的解决方法

    mysql一对多关联查询分页错误问题的解决方法

    这篇文章主要介绍了mysql一对多关联查询分页错误问题的解决方法,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下...

    会迟到但不会缺席2162019-06-23
  • Mysql定时备份 Mysql并上传到七牛的方法

    定时备份 Mysql并上传到七牛的方法

    常见的 MySQL 数据备份方式有,直接打包复制对应的数据库或表文件(物理备份)、mysqldump 全量逻辑备份、xtrabackup 增量逻辑备份等。这篇文章主要介绍了定时...

    舆图易稿5132019-06-21