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
下面先来看看例子:
- table
- id name
- 1 a
- 2 b
- 3 c
- 4 c
- 5 b
库结构大概这样,这只是一个简单的例子,实际情况会复杂得多,比如我想用一条语句查询得到name不重复的所有数据,那就必须使用distinct去掉多余的重复记录,代码如下:
select distinct name from table
得到的结果是:
- name
- a
- b
- c
好像达到效果了,可是,我想要得到的是id值呢?改一下查询语句吧,代码如下:
select distinct name, id from table
结果会是:
- id name
- 1 a
- 2 b
- 3 c
- 4 c
- 5 b
distinct怎么没起作用?作用是起了的,不过他同时作用了两个字段,也就是必须得id与name都相同的才会被排除,突然灵机一闪,既然可以使用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之前,不然会报错,OK了.
补充:经过本人测试 select *, count(distinct name) from table group by name 就可以了.
查找所有重复数据,代码如下:
- /* 查找所有重复数据 */
- SELECT `t1`.*
- FROM `t1`,(
- SELECT `name`,`add`
- FROM `t1`
- GROUP BY `name`,`add`
- HAVING COUNT(1) > 1
- ) AS `t2`
- WHERE `t1`.`name` = `t2`.`name`
- AND `t1`.`add` = `t2`.`add`;
- +----+------+-----+
- | id | name | add |
- +----+------+-----+
- | 1 | abc | 123 |
- | 2 | abc | 123 |
- | 4 | abc | 123 |
- | 6 | xzy | 456 |
- | 7 | xzy | 456 |
- | 8 | xzy | 456 |
- | 9 | xzy | 789 |
- | 11 | xzy | 789 |
- | 12 | ijk | 147 |
- | 13 | ijk | 147 |
- | 19 | tpk | 963 |
- | 20 | tpk | 963 |
- | 21 | wer | 546 |
- | 22 | wer | 546 |
- +----+------+-----+
- rows in set (0.00 sec)
查找除id最小的数据外的重复数据,代码如下:
- /* 查找除id最小的数据外的重复数据 */
- SELECT `t1`.*
- FROM `t1`,(
- SELECT DISTINCT MIN(`id`) AS `id`,`name`,`add`
- FROM `t1`
- GROUP BY `name`,`add`
- HAVING COUNT(1) > 1
- ) AS `t2`
- WHERE `t1`.`name` = `t2`.`name`
- AND `t1`.`add` = `t2`.`add`
- AND `t1`.`id` <> `t2`.`id`;
- +----+------+-----+
- | id | name | add |
- +----+------+-----+
- | 2 | abc | 123 |
- | 4 | abc | 123 |
- | 7 | xzy | 456 | --phpfensi.com
- | 8 | xzy | 456 |
- | 11 | xzy | 789 |
- | 13 | ijk | 147 |
- | 20 | tpk | 963 |
- | 22 | wer | 546 |
- +----+------+-----+
- rows in set (0.00 sec)
Tags: mysql去除重复记录 mysql记录
相关文章
- ·mysql delete删除记录数据库空间不减少问题解决方法(2014-09-23)
- ·MySQL中整条记录复制并插入方法(2014-10-12)
- ·MySQL 当记录不存在时插入insert if not exists(2014-10-15)
- ·mysql表中记录重复处理方案(2015-04-17)
推荐文章
热门文章
最新评论文章
- 写给考虑创业的年轻程序员(10)
- PHP新手上路(一)(7)
- 惹恼程序员的十件事(5)
- PHP邮件发送例子,已测试成功(5)
- 致初学者:PHP比ASP优秀的七个理由(4)
- PHP会被淘汰吗?(4)
- PHP新手上路(四)(4)
- 如何去学习PHP?(2)
- 简单入门级php分页代码(2)
- php中邮箱email 电话等格式的验证(2)