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

 更新时间:2014年07月08日 09:36:17   投稿:hebedich  
在实际项目中,我们经常会遇到删除数据库中重复数据的问题,貌似是很简单的问题哈,下面我们来探讨下

刚开始,根据我的想法,这个很简单嘛,上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数据库的多种连接方式以及实用工具

    mysql连接操作是客户端进程与mysql数据库实例进程进行通信,下面这篇文章主要给大家介绍了关于MySQL数据库的多种连接方式以及实用工具的相关资料,文中通过图文介绍的非常详细,需要的朋友可以参考下
    2023-02-02
  • mysql判断查询条件是否包含某字符串的7种方式

    mysql判断查询条件是否包含某字符串的7种方式

    本文主要介绍了mysql判断查询条件是否包含某字符串,主要介绍了7种方式,具有一定的参考价值,感兴趣的可以了解一下
    2023-10-10
  • mysql远程登录出错的解决方法

    mysql远程登录出错的解决方法

    mysql远程登录出错的情况,先比很多朋友都有遇到过吧,下面有个不错的解决方法,大家可以参考下
    2014-01-01
  • mysql5.7的安装及Navicate长久免费使用的实现过程

    mysql5.7的安装及Navicate长久免费使用的实现过程

    这篇文章主要介绍了mysql5.7的安装及Navicate长久免费使用的实现过程,本文给大家分享问题及解决方法,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-11-11
  • Mysql row number()排序函数的用法和注意

    Mysql row number()排序函数的用法和注意

    这篇文章主要介绍了Mysql row number()排序函数的用法和注意 的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2016-07-07
  • Mysql超时配置项的深入理解

    Mysql超时配置项的深入理解

    超时是我们日常经常会遇到的一个问题,这篇文章主要给大家介绍了关于Mysql超时配置项的深入理解,内容简明扼要并且容易理解,绝对能使你眼前一亮,需要的朋友可以参考下
    2023-01-01
  • MySQL学习第五天 MySQL数据库基本操作

    MySQL学习第五天 MySQL数据库基本操作

    MySQL学习第五天我们将针对MySQL数据库进行基本操作,创建、修改、删除数据库等一系列操作进行学习,感兴趣的小伙伴们可以参考一下
    2016-05-05
  • 基于mysql replication的问题总结

    基于mysql replication的问题总结

    本篇文章是对mysql中replication的问题进行了详细分析介绍,需要的朋友参考下
    2013-06-06
  • MySQL单表百万数据记录分页性能优化技巧

    MySQL单表百万数据记录分页性能优化技巧

    自己的一个网站,由于单表的数据记录高达了一百万条,造成数据访问很慢,Google分析的后台经常报告超时,尤其是页码大的页面更是慢的不行
    2016-08-08
  • MySQL的数据类型和建库策略分析详解

    MySQL的数据类型和建库策略分析详解

    无论是在小得可怜的免费数据库空间或是大型电子商务网站,合理的设计表结构、充分利用空间是十分必要的。这就要求我们对数据库系统的常用数据类型有充分的认识。下面我就将我的一点心得写出来跟大家分享。
    2008-04-04

最新评论