mysql 去除重复记录sql语句详解

萧红SEO SEO爱好者,分享SEO经验~

在mysql去除重复记录的方法有很多,同时mysql还带了一个DISTINCT关键字就可以了,下面我来给大家详细介绍介绍去除重复记录sql语句吧,有需要了解的朋友可参考.

SQL SELECT DISTINCT 语句

语法:SELECT DISTINCT 列名称 FROM 表名称使用 DISTINCT 关键词

如果要从 "Company" 列中选取所有的值,我们需要使用 SELECT 语句:

SELECT Company FROM Orders

如需从 Company" 列中仅选取唯一不同的值,我们需要使用 SELECT DISTINCT 语句,代码如下:

SELECT DISTINCT Company FROM Orders

下面先来看看例子:

  1. table
  2. idname
  3. 1a
  4. 2b
  5. 3c
  6. 4c
  7. 5b

库结构大概这样,这只是一个简单的例子,实际情况会复杂得多,比如我想用一条语句查询得到name不重复的所有数据,那就必须使用distinct去掉多余的重复记录,代码如下:

select distinct name from table

得到的结果是:

  1. name
  2. a
  3. b
  4. c

好像达到效果了,可是,我想要得到的是id值呢?改一下查询语句吧,代码如下:

select distinct name, id from table

结果会是:

  1. idname
  2. 1a
  3. 2b
  4. 3c
  5. 4c
  6. 5b

distinct怎么没起作用?作用是起了的,不过他同时作用了两个字段,也就是必须得id与name都相同的才会被排除,突然灵机一闪,既然可以使用group_concat函数,那其它函数能行吗?

赶紧用count函数一试,成功,我想哭啊,费了这么多工夫,原来就这么简单,现在将完整语句放出,代码如下:

select *, count(distinct name) from table group by name

结果:

  1. idnamecount(distinctname)
  2. 1a1
  3. 2b1
  4. 3c1

最后一项是多余的,不用管就行了,目的达到,唉,原来mysql这么笨,轻轻一下就把他骗过去了,郁闷也就我吧,对了,还有容容那家伙,现在拿出来希望大家不要被这问题折腾.

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

补充:经过本人测试 select *, count(distinct name) from table group by name 就可以了.

查找所有重复数据,代码如下:

  1. /*查找所有重复数据*/
  2. SELECT`t1`.*
  3. FROM`t1`,(
  4. SELECT`name`,`add`
  5. FROM`t1`
  6. GROUPBY`name`,`add`
  7. HAVINGCOUNT(1)>1
  8. )AS`t2`
  9. WHERE`t1`.`name`=`t2`.`name`
  10. AND`t1`.`add`=`t2`.`add`;
  11. +----+------+-----+
  12. |id|name|add|
  13. +----+------+-----+
  14. |1|abc|123|
  15. |2|abc|123|
  16. |4|abc|123|
  17. |6|xzy|456|
  18. |7|xzy|456|
  19. |8|xzy|456|
  20. |9|xzy|789|
  21. |11|xzy|789|
  22. |12|ijk|147|
  23. |13|ijk|147|
  24. |19|tpk|963|
  25. |20|tpk|963|
  26. |21|wer|546|
  27. |22|wer|546|
  28. +----+------+-----+
  29. rowsinset(0.00sec)

查找除id最小的数据外的重复数据,代码如下:

  1. /*查找除id最小的数据外的重复数据*/
  2. SELECT`t1`.*
  3. FROM`t1`,(
  4. SELECTDISTINCTMIN(`id`)AS`id`,`name`,`add`
  5. FROM`t1`
  6. GROUPBY`name`,`add`
  7. HAVINGCOUNT(1)>1
  8. )AS`t2`
  9. WHERE`t1`.`name`=`t2`.`name`
  10. AND`t1`.`add`=`t2`.`add`
  11. AND`t1`.`id`<>`t2`.`id`;
  12. +----+------+-----+
  13. |id|name|add|
  14. +----+------+-----+
  15. |2|abc|123|
  16. |4|abc|123|
  17. |7|xzy|456|--phpfensi.com
  18. |8|xzy|456|
  19. |11|xzy|789|
  20. |13|ijk|147|
  21. |20|tpk|963|
  22. |22|wer|546|
  23. +----+------+-----+
  24. rowsinset(0.00sec)

相关广告
  • mysql 去除重复记录sql语句详解 mysql 去除重复记录sql语句详解 mysql 去除重复记录sql语句详解
相关阅读

mysql 去除重复记录sql语句详解

2019/10/10 17:35:05 | 谷歌SEO算法 | 手机网站制作