纯净、安全、绿色的下载网站

首页|软件分类|下载排行|最新软件|IT学院

当前位置:首页数据库Mysql

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

  2020-12-15 我要评论
在实际项目中,我们经常会遇到删除数据库中重复数据的问题,貌似是很简单的问题哈,下面我们来探讨下

刚开始,根据我的想法,这个很简单嘛,上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; 



相关文章

猜您喜欢

  • 将 Ghost 从 SQLite3 数据库迁移到 MySQL 数据库

    如果网站流量小,直接使用 Ghost 默认的 SQLite 数据库还是很方便的,能够省去安装、配置数据库的繁琐步骤。但是,随着网站流量的增加, SQLite 就慢慢顶不住了,这时最好的选择就是使用 MySQL 数据库。..
  • MySQL性能优化之table_cache配置参数浅析

    本文着重讲解了MySQL性能优化之table_cache配置参数浅析,本文讲解了它的缓存机制、参数优化及清空缓存的命令等,欢迎大家阅读和收藏..

网友评论

Copyright 2020 www.f3soft.com 【亲宝软件园】 版权所有 软件发布

声明:所有软件和文章来自软件开发商或者作者 如有异议 请与本站联系 点此查看联系方式