mysql删除重复数据记录sql语句总结
发布:smiling 来源: PHP粉丝网 添加日期:2014-10-05 16:57:05 浏览: 评论:0
删除重复记录的方法有很多种,这里我来总结了各种各样的删除重启记录的sql语句,如:删除id重复的数据,查找重复的,并且除掉最小的那个,删除重复记录,只保留一条记录和删除表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断,只留有rowid最小的记录等等.
我最常用的方法是,代码如下:
- //删除id重复的数据,适合id是手工主键
- delete person as a from person as a,
- (
- select *,min(id) from person group by id having count(1) > 1
- ) as b
- where a.id = b.id
- //查找重复的,并且除掉最小的那个
- delete tb_person as a from tb_person as a,
- (
- select *,min(id) from tb_person group by name having count(1) > 1
- ) as b
- where a.name = b.name and a.id > b.id;
好了下面再总结一些:
1.查询需要删除的记录,会保留一条记录,代码如下:
select a.id,a.subject,a.RECEIVER from test1 a left join (select c.subject,c.RECEIVER ,max(c.id) as bid from test1 c where status=0 GROUP BY RECEIVER,SUBJECT having count(1) >1) b on a.id< b.bid where a.subject=b.subject and a.RECEIVER = b.RECEIVER and a.id < b.bid
2.删除重复记录,只保留一条记录,注意,subject,RECEIVER 要索引,否则会很慢的,代码如下:
delete a from test1 a, (select c.subject,c.RECEIVER ,max(c.id) as bid from test1 c where status=0 GROUP BY RECEIVER,SUBJECT having count(1) >1) b where a.subject=b.subject and a.RECEIVER = b.RECEIVER and a.id < b.bid;
3.查找表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断,代码如下:
select * from people where peopleId in (select peopleId from people group by peopleId having count(peopleId) > 1)
4.删除表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断,只留有rowid最小的记录,代码如下:
delete from people where peopleId in (select peopleId from people group by peopleId having count(peopleId) > 1) and rowid not in (select min(rowid) from people group by peopleId having count(peopleId )>1)
5.删除表中多余的重复记录,多个字段,只留有rowid最小的记录,代码如下:
delete from vitae a where (a.peopleId,a.seq) in (select peopleId,seq from vitae group by peopleId,seq having count(*) > 1) and rowid not in (select min(rowid) from vitae group by peopleId,seq having count(*)>1)
说了这么多了我们来个例子吧,例子如下:
- drop table t_user;
- create table t_user(
- id int(5) not null auto_increment,
- username varchar(10),
- age int(3),
- primary key(id)
- );
- insert into t_user(username,age) values('aaa',20);
- insert into t_user(username,age) values('aaa',20);
- insert into t_user(username,age) values('bbb',20);
- insert into t_user(username,age) values('bbb',20);
- insert into t_user(username,age) values('ccc',20);
- insert into t_user(username,age) values('ccc',20);
- insert into t_user(username,age) values('ddd',20);
- insert into t_user(username,age) values('ddd',20);
- mysql> select * from t_user;
- +----+----------+------+
- | id | username | age |
- +----+----------+------+
- | 1 | aaa | 20 |
- | 2 | aaa | 20 |
- | 3 | bbb | 20 |
- | 4 | bbb | 20 |
- | 5 | ccc | 20 |
- | 6 | ccc | 20 |
- | 7 | ddd | 20 |
- | 8 | ddd | 20 |
- +----+----------+------+
- mysql> delete t_user from t_user , (select id from t_user group by username having count(*)>1 ) as t2 where t_user.id=t2.id;
- Query OK, 4 rows affected (0.05 sec)
- mysql> select * from t_user;
- +----+----------+------+
- | id | username | age |
- +----+----------+------+
- | 2 | aaa | 20 | --phpfensi.com
- | 4 | bbb | 20 |
- | 6 | ccc | 20 |
- | 8 | ddd | 20 |
- +----+----------+------+
Tags: mysql删除记录 mysql重复数据
- 上一篇:mysql分表实现方法详解
- 下一篇:Mysql子查询和联合(UNION)查询详解
相关文章
- ·mysql delete删除记录数据库空间不减少问题解决方法(2014-09-23)
- ·mysql中truncate删除记录恢复笔记(2014-09-24)
- ·mysql中删除记录TRUNCATE与DELETE区别(2014-09-24)
- ·MySQL删除记录Delete 与Truncate 语句介绍(2014-10-03)
- ·mysql删除重复记录sql语句(2014-10-08)
- ·MySQL 数据库中删除重复记录方法总结(2014-10-12)
- ·mysql查询筛选重复数据sql语句(2014-09-28)
- ·MySQL处理重复 防止重复数据实例(2014-09-29)
- ·mysql删除字段重复的数据sql语句(2014-10-01)
- ·MYSQL中GROUP分组去除重复数据(2015-04-17)
推荐文章
热门文章
最新评论文章
- 写给考虑创业的年轻程序员(10)
- PHP新手上路(一)(7)
- 惹恼程序员的十件事(5)
- PHP邮件发送例子,已测试成功(5)
- 致初学者:PHP比ASP优秀的七个理由(4)
- PHP会被淘汰吗?(4)
- PHP新手上路(四)(4)
- 如何去学习PHP?(2)
- 简单入门级php分页代码(2)
- php中邮箱email 电话等格式的验证(2)