当前位置:首页 > Mysql教程 > 列表

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

发布:smiling 来源: PHP粉丝网  添加日期:2014-10-05 16:13:21 浏览: 评论:0 

在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. id name 
  3. 1 a 
  4. 2 b 
  5. 3 c 
  6. 4 c 
  7. 5 b 

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

select distinct name from table

得到的结果是:

  1. name 

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

select distinct name, id from table

结果会是:

  1. id name 
  2. 1 a 
  3. 2 b 
  4. 3 c 
  5. 4 c 
  6. 5 b 

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

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

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

结果:

  1. id name count(distinct name
  2. 1 a 1 
  3. 2 b 1 
  4. 3 c 1 

最后一项是多余的,不用管就行了,目的达到,唉,原来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.   GROUP BY `name`,`add
  7.   HAVING COUNT(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.  rows in set (0.00 sec) 

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

  1. /* 查找除id最小的数据外的重复数据 */ 
  2. SELECT `t1`.* 
  3. FROM `t1`,( 
  4.   SELECT DISTINCT MIN(`id`) AS `id`,`name`,`add
  5.   FROM `t1` 
  6.   GROUP BY `name`,`add
  7.   HAVING COUNT(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.  rows in set (0.00 sec)

Tags: mysql去除重复记录 mysql记录

分享到: