场景:某个线上数据库表中,存在重复数据,我们要保证数据的准确性,一方面要保证数据不遗漏,另一方面要保证数据不重复,因此可能会去给这张表添加联合唯一索引,但是发现表中已经有很多重复数据,因此需要根据多个条件去删除重复数据,相同数据只留一份。
解决办法:
使用sql的delete删除重复数据
DELETE t1 FROM t1,t2 WHERE t1.id = t2.id 或者DELETE FROM t1 USING t1,t2 WHERE t1.id = t2.id
具体使用可以是多张表,也可以是一张表,例如我的是一张表中的数据:
DELETE t1
FROM
t1,
(
SELECT
min(id) id,
field1,
field2,
field3,
field4
FROM
t1
GROUP BY
field1,
field2,
field3,
field4
HAVING
count(*) > 1
) t2
WHERE
t1.field1 = t2.field1
AND t1.field2 = t.field2
AND t1.field3 = t.field3
AND t1.field4 = t.field4
AND t1.id > t2.id;