MySQL 删除数据库中重复数据方法小结

所属分类: 数据库 / Mysql 阅读数: 1504
收藏 0 赞 0 分享

刚开始,根据我的想法,这个很简单嘛,上sql语句

delete from zqzrdp where tel in (select min(dpxx_id) from zqzrdp group by tel having count(tel)>1);

执行,报错!!~!~

异常意为:你不能指定目标表的更新在FROM子句。傻了,MySQL 这样写,不行,让人郁闷。

难倒只能分步操作,蛋疼

以下是网友写的,同样是坑爹的代码,我机器上运行不了。

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)

看来想偷懒使用一句命令完成这个事好像不太显示,还是老老实实的分步处理吧,思路先建立复制一个临时表,然后对比临时表内的数据,删除主表里的数据

alter table tableName add autoID int auto_increment not null; 

create table tmp select min(autoID) as autoID from tableName group by Name,Address; 

create table tmp2 select tableName.* from tableName,tmp where tableName.autoID = tmp.autoID; 

drop table tableName; 

rename table tmp2 to tableName; 


更多精彩内容其他人还在看

MySQL中的基本查询语句学习笔记

这篇文章主要介绍了MySQL中的基本查询语句学习笔记,包括使用limit限制查询结果条数和合并查询结果的方法,需要的朋友可以参考下
收藏 0 赞 0 分享

详解MySQL中的分组查询与连接查询语句

这篇文章主要介绍了MySQL中的分组查询与连接查询语句,同时还介绍了一些统计函数的用法,需要的朋友可以参考下
收藏 0 赞 0 分享

linux下安装升级mysql到新版本(5.1-5.7)

这篇文章主要介绍了linux下安装升级mysql到新版本(5.1-5.7),需要的朋友可以参考下
收藏 0 赞 0 分享

MySQL备份时排除指定数据库的方法

这篇文章主要介绍了MySQL备份时排除指定数据库的方法的相关资料,需要的朋友可以参考下
收藏 0 赞 0 分享

Mysql数据库之索引优化

MySQL凭借着出色的性能、低廉的成本、丰富的资源,已经成为绝大多数互联网公司的首选关系型数据库。本文给大家介绍mysql数据库之索引优化,感兴趣的朋友一起学习吧
收藏 0 赞 0 分享

Mysql性能优化方案分享

这篇文章主要为大家分享了Mysql性能优化方案,帮助大家进行Mysql性能优化,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

MySQL中一些常用的数据表操作语句笔记

这篇文章主要介绍了MySQL中一些常用的数据表操作语句笔记,其中重点讲解了删除关联表的方法,需要的朋友可以参考下
收藏 0 赞 0 分享

mysql版本5.5.x升级到5.6.x步骤分享

在我做的一个项目中,最近我对生产服务器上的一系列系统软件进行了升级,包括git、nginx、MySQL和PHP。这篇文章讲的是升级MySQL的过程,其他软件的升级将在其他文章中介绍。
收藏 0 赞 0 分享

Mysql IO 内存方面的优化

这篇文章主要介绍了Mysql IO 内存方面的优化 的相关资料,需要的朋友可以参考下
收藏 0 赞 0 分享

Mysql忘记root密码怎么办

MySQL有时候忘记了root密码是一件伤感的事,下面通过本文给大家介绍Mysql忘记root密码怎么办的相关知识,需要的朋友参考下
收藏 0 赞 0 分享
查看更多