MySQL中删除重复记录(多个字段)


今天在将多个分表合并为一个表时,遇到了一个问题。这些分表由业务人员创建,其中一部分未加UNIQUE索引,导致这些表中的部分数据重复,需要删除其中的重复数据。

思路为:首先将数据按照字段A、B、C、D分组(如果A、B、C、D相同就认为数据重复),求出记录大于1的最大id,然后删除这个id的数据。sql语句如下:

1
2
3
DELETE FROM test WHERE id IN
(SELECT id FROM
(SELECT MAX(id) AS id,COUNT(*) AS COUNT FROM test GROUP BY A,B,C,D HAVING COUNT >1 ORDER BY COUNT DESC) AS tab );

备注:因为每次只删除重复数据的最大id,所以如果重复数据有多条的情况,需要执行多次delete。

顺表吐槽一下:业务人员在数据库建表的时候不能只考虑自己程序性能问题和编程方便,而不考虑数据库性能,导致数据库管理员在处理数据时,需要多花很多时间解决业务遗留的问题。所以,在建库建表时业务人员应和数据库管理员共同设计数据库架构。

参考文档:
Mysql删除重复数据