本文共 1122 字,大约阅读时间需要 3 分钟。
在实际项目中,经常会遇到需要删除重复数据的情况。以下是针对Route表中payment_type=0且point_start和point_end相同的重复数据的两种解决方案。
DELETE FROM Route WHERE id IN ( SELECT b.id FROM ( SELECT * FROM Route a WHERE id > (SELECT MIN(id) FROM Route WHERE payment_type=0 AND point_start=a.point_start AND point_end=a.point_end) ) b);
这种方法的核心思路是通过自连接的方式筛选出payment_type=0且point_start和point_end相同的记录,并删除id较大的重复数据。具体来说:
DELETE FROM Route WHERE id IN ( SELECT b.id FROM ( SELECT * FROM Route WHERE (point_start, point_end) IN ( SELECT point_start, point_end FROM Route a WHERE payment_type=0 GROUP BY point_start, point_end HAVING COUNT(*) > 1 ) AND id NOT IN ( SELECT MIN(id) FROM Route t GROUP BY t.point_start, t.point_end HAVING COUNT(*) > 1 ) ) b);
这种方法的逻辑稍微复杂一些:
两种方法都能满足需求,但具体性能表现可能会有差异。如果你对性能有特别的要求,可以自己测试一下。
转载地址:http://fkbfk.baihongyu.com/