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

MySQL新版本下如何删除数据表中的单条重复行?

删除MySQL数据表中的单条重复记录

问题描述

现有如下数据表:

SchoolIdStudentName
101Majid Bhuiyan
101Majid Bhuiyan
102Arif
103Tamim Rahman
104Sourov Doggesh

需要删除其中一行重复的SchoolId=101,StudentName=Majid Bhuiyan记录,仅保留一行。

解决方案

方法1:自连接删除(兼容所有MySQL版本)

如果表无主键或唯一标识列,可利用InnoDB隐藏的行标识列ctid(MyISAM引擎用ROWID)区分重复行,保留一行、删除另一行:

DELETE t1
FROM your_table t1
JOIN your_table t2 
ON t1.SchoolId = t2.SchoolId 
AND t1.StudentName = t2.StudentName
AND t1.ctid > t2.ctid;

方法2:窗口函数删除(MySQL 8.0及以上版本)

借助ROW_NUMBER()窗口函数给重复行编号,精准删除目标重复项:

WITH ranked_students AS (
    SELECT 
        SchoolId, 
        StudentName,
        ROW_NUMBER() OVER (PARTITION BY SchoolId, StudentName ORDER BY (SELECT NULL)) AS rn
    FROM your_table
)
DELETE FROM your_table
WHERE (SchoolId, StudentName, rn) IN (
    SELECT SchoolId, StudentName, rn 
    FROM ranked_students 
    WHERE rn > 1
    AND SchoolId = 101 
    AND StudentName = 'Majid Bhuiyan'
);

注意事项

  • 执行删除前务必备份数据,避免误删重要内容。
  • 若表有主键/自增列,可直接用该列替代ctid或窗口函数的排序条件,逻辑更清晰。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 21:17:09