You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在MySQL中删除product_id重复的行并保留最新的记录

MySQL 删除重复 product_id 记录(仅保留最新条)方案

核心逻辑

按照product_id分组,每组保留id最大的记录(id自增场景下id越大代表记录越新),其余重复记录删除。两种常用实现方式如下,均支持后续新增重复数据时重复执行自动清理旧记录。

方案1:子查询法(新手易理解)

适合小数据量场景,逻辑直观:

-- 请将下面的 product_rule 替换为你实际的表名
DELETE FROM product_rule
WHERE id NOT IN (
    SELECT keep_id FROM (
        -- 先查询每个 product_id 要保留的最大id
        SELECT MAX(id) AS keep_id FROM product_rule GROUP BY product_id
    ) AS temp_table
);

注意:MySQL 不允许在 DELETE 语句中直接引用操作表作为子查询源,因此需要额外嵌套一层临时表temp_table绕过语法限制。


方案2:自连接删除(性能更优)

适合中大数据量场景,执行效率更高:

-- 请将下面的 product_rule 替换为你实际的表名
DELETE t1
FROM product_rule t1
INNER JOIN product_rule t2
  ON t1.product_id = t2.product_id 
  AND t1.id < t2.id;

逻辑说明:将表和自身做等值连接,匹配相同product_id的记录,只要t1的id小于t2,就说明t1是更旧的重复记录,直接删除即可。

前置验证建议(避免误删)

执行删除前先运行以下查询确认要删除的记录符合预期:

  • 查询所有待保留的记录:
SELECT MAX(id) AS id, rule_id, product_id 
FROM product_rule 
GROUP BY product_id;
  • 查询所有待删除的重复记录:
SELECT * FROM product_rule
WHERE id NOT IN (
    SELECT keep_id FROM (
        SELECT MAX(id) AS keep_id FROM product_rule GROUP BY product_id
    ) AS temp_table
);

注意事项

  • 数据量超过10万时建议提前给product_id和id字段加索引,大幅提升执行效率
  • 生产环境操作前务必先备份数据,建议先在测试环境验证逻辑正确性

内容的提问来源于stack exchange,提问作者Eatsam ul haq

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 15:27:03