MySQL中删除重复记录(多个字段)
今天在将多个分表合并为一个表时,遇到了一个问题。这些分表由业务人员创建,其中一部分未加UNIQUE索引,导致这些表中的部分数据重复,需要删除其中的重复数据。
思路为:首先将数据按照字段A、B、C、D分组(如果A、B、C、D相同就认为数据重复),求出记录大于1的最大id,然后删除这个id的数据。sql语句如下:
1
2
3DELETE 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。