MySQL 5.7.34多列重复行删除方案咨询(70k数据量)
解决MySQL 5.7删除model和make重复行的问题
你原来的SQL出现全删问题,核心是表名不一致(DELETE操作car_db,子查询却查carsa),另外MySQL 5.7不允许在DELETE语句中直接引用同一张表的子查询,需要改用JOIN方式实现。
方案1:保留每组重复数据中ID最小的行(匹配你的示例期望结果)
DELETE t1 FROM `car_db` t1 JOIN `car_db` t2 ON t1.make = t2.make AND t1.model = t2.model AND t1.id > t2.id;
原理:通过自连接找到同组(make+model)中ID更大的行,删除这些行后,每组仅保留ID最小的记录。
方案2:保留每组重复数据中ID最大的行
如果需要保留最新(ID最大)的记录,使用以下语句:
DELETE t1 FROM `car_db` t1 JOIN `car_db` t2 ON t1.make = t2.make AND t1.model = t2.model AND t1.id < t2.id;
额外注意事项
- 执行删除前务必先备份数据,或先用SELECT语句验证要删除的行:
SELECT t1.* FROM `car_db` t1 JOIN `car_db` t2 ON t1.make = t2.make AND t1.model = t2.model AND t1.id > t2.id; - 70k数据量不大,该操作执行效率可保障,建议在业务低峰期执行。
内容的提问来源于stack exchange,提问作者Artur
相关产品推荐
相关产品推荐

