• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • MsSql
  • Mysql
  • oracle
  • MariaDB
  • DB2
  • SQLite
  • PostgreSQL
  • MongoDB
  • Redis
  • Access
  • 数据库其它
  • sybase
  • HBase
您的位置:首页 > 数据库 >Mysql > 解析mysql中:单表distinct、多表group by查询去除重复记录

解析mysql中:单表distinct、多表group by查询去除重复记录

作者: 字体:[增加 减小] 来源:互联网 时间:2017-05-11

通过本文主要向大家介绍了mysql多表联合查询,mysql多表查询,mysql多表查询语句,mysql多表连接查询,mysql 多表联查等相关知识,希望本文的分享对您有所帮助
单表的唯一查询用:distinct
多表的唯一查询用:group by
distinct 查询多表时,left join 还有效,全连接无效,
在使用mysql时,有时需要查询出某个字段不重复的记录,虽然mysql提供有distinct这个关键字来过滤掉多余的重复记录只保留一条,但往往只用它来返回不重复记录的条数,而不是用它来返回不重复记录的所有值。其原因是distinct只能返回它的目标字段,而无法返回其它字段,用distinct不能解决的话,我只有用二重循环查询来解决,而这样对于一个数据量非常大的站来说,无疑是会直接影响到效率的。
下面先来看看例子:
表的结构如下:
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条件里?试试,照样报错。

试了半天其他能想到的方法也不行,最后在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之前,不然会报错。
说一下group by的实际例子:
</div>
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 解析Mysql多表查询的实现
  • MySQL多表之间字段的匹配实现代码
  • Mysql跨表更新 多表update sql语句总结
  • mysql多表联合查询返回一张表的内容实现代码
  • MySQL多表联合查询说明
  • 对MySQL几种联合查询的通俗解释
  • mysql中多表删除其中ID相同记录的方法
  • 解析mysql中:单表distinct、多表group by查询去除重复记录

相关文章

  • 2018-12-05MySQL大表中重复字段的高效率查询方法
  • 2018-12-05Mysql5.7中关于JSON函数操作的实例详解
  • 2018-12-05Mysql原先内容不改变并在后面增加内容的sql语句详解
  • 2018-12-05推荐10款涉及参数特效(收藏)
  • 2017-05-11MySQL中的max()函数使用教程
  • 2018-12-05总结10篇索引操作的实例教程
  • 2018-12-05MySQL中的LOCATE和POSITION函数使用方法
  • 2018-12-05Mysql之运算符与函数的总结
  • 2018-12-05sqlserver 比较两个表的列
  • 2018-12-05Oracle 随机数

文章分类

  • MsSql
  • Mysql
  • oracle
  • MariaDB
  • DB2
  • SQLite
  • PostgreSQL
  • MongoDB
  • Redis
  • Access
  • 数据库其它
  • sybase
  • HBase

最近更新的内容

    • mysql Out of memory (Needed 16777224 bytes)的错误解决
    • MySQL数据库中删除重复记录的方法总结[推荐]
    • MySQL新用户无法登录该如何解决?
    • 优化定位较低sql的两种方式详解
    • 详细介绍mysql基础知识扫盲(图)
    • mysql服务1067错误及解决方法
    • MYSQL学习总结(八):常见问题
    • ACCESS 调用后台存储过程的实现方法
    • 用SQL语句实现替换字符串
    • mysql-Microsoft SQL Server和mysq,刚入门的小白应该选哪个

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有