Mysql数据库删除重复数据

最近因为发现数据库中的表有脏数据,需要维护。这些脏数据就是重复数据,需要将其删除。

现假设有一张test表,主键字段为num,还有id,one,two三个字段。假设id规定只能有一条记录(即需要为id建立联合唯一索引)。表中数据如下:

可以看出:表中数据明显有不满足条件的重复数据。

解决方法:使用一个中间临时表过渡~~

先查看需要保留的记录的id

先查看重复记录的最小id

SELECT id from test where id in (SELECT MIN(id) from test GROUP BY id having count(id )>1)

再查看没有重复的记录id

SELECT id from test GROUP BY id having count(id)=1

首先,建立一个临时表如下:

Sql代码 
  1. CREATE TABLE tmp AS select id from test where id not in (SELECT id from test where id in (SELECT MIN(id) from test GROUP BY id having count(id )>1) or id in(SELECT MIN(id) from test GROUP BY id having count(id)=1))

 这张临时表记录了重复记录里所有需要删除的id。

接下来,删除不在里面的记录即可:

Sql代码  收藏代码
  1. DELETE FROM test WHERE id NOT IN(SELECT * FROM tmp

 检查下现在的记录:

 发现,记录终于“干净”了。。重复性的记录被成功删除了!

posted @ 2018-12-18 22:40  程序咖啡  阅读(289)  评论(0编辑  收藏  举报