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

MySQL 8+无唯一ID表:能否用单条SQL语句删除重复记录?

在MySQL 8+中用单条SQL删除无唯一ID表的重复记录

当然可以实现,借助MySQL 8.0引入的窗口函数,只用单条SQL就能完成无唯一ID表的重复记录删除。针对你提供的employee表,我们可以用ROW_NUMBER()窗口函数给重复分组内的行编号,然后删除编号大于1的重复行。

具体SQL语句

DELETE e1
FROM employee e1
JOIN (
    SELECT 
        employee_name,
        age,
        ROW_NUMBER() OVER (PARTITION BY employee_name, age ORDER BY (SELECT NULL)) AS row_num
    FROM employee
) e2 
ON e1.employee_name = e2.employee_name 
AND e1.age = e2.age
WHERE e2.row_num > 1;

逻辑说明

  • PARTITION BY employee_name, age:将表中数据按employee_name和age分组,把重复的记录归为同一组。
  • ROW_NUMBER() OVER (...):给每个分组内的行分配递增编号,每组第一行编号为1,后续重复行编号依次为2、3...
  • 通过JOIN关联原表和子查询结果,删除所有编号大于1的行,只保留每组的第一条记录。

注意事项

  • ORDER BY (SELECT NULL)是因为窗口函数必须指定ORDER BY子句,这里不需要特定排序顺序,用它可以让MySQL随机保留分组内的任意一行。如果后续表中添加了时间类字段(比如create_time),可以替换为ORDER BY create_time DESC保留最新记录,或者ASC保留最早记录。

内容的提问来源于stack exchange,提问作者Farazinux

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 04:52:38