首页 > 解决方案 > mysql中的重复数据删除

问题描述

在此处输入图像描述 我有一个 USER 表,当字段年龄和名称相等时,我需要对记录进行重复数据删除,并在 5 分钟内保留最早的记录:我得到了这样的 sql,但不知何故不起作用:


SELECT *
FROM user u1
WHERE NOT EXISTS (SELECT *
                  FROM user u2 
                  WHERE u2.name = u1.name AND u2.age = u1.age
                    AND u2.created_at > u1.created_at - INTERVAL 5 MINUTE)


标签: mysqlsql

解决方案


我们可以尝试将逻辑表述为删除任何可以找到另一条具有相同年龄和名称的记录的记录,创建时间在考虑删除记录的 5 分钟内。

DELETE
FROM user u1
WHERE EXISTS (SELECT 1 FROM user u2
              WHERE u2.age = u1.age AND u2.name = u1.name AND
                    TIMEDIFF(t2.create_time, t1.create_time) < '00:05:00');

这假定您实际上想要删除重复的记录。如果您只想选择,请使用@Nick 提供的逻辑,这与我的删除查询非常相似。


推荐阅读