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

如何使用SQL删除具有相同id值的重复行?

删除SQL表中重复id行的解决方案

根据你的需求——保留每个id对应的唯一一行记录,以下是不同SQL数据库的可行方案:

MySQL 场景

方案1:通过自增/唯一列关联删除

假设表存在唯一标识列(比如自增列row_id),可以用JOIN方式删除重复项,保留row_id最小的那一行:

DELETE t1 FROM your_table t1
JOIN your_table t2 
ON t1.id = t2.id AND t1.row_id > t2.row_id;

方案2:窗口函数(MySQL 8.0及以上)

利用ROW_NUMBER()给每个id分组的行标记序号,删除序号大于1的行:

WITH ranked_rows AS (
    SELECT *,
           ROW_NUMBER() OVER (PARTITION BY id ORDER BY (SELECT NULL)) AS rn
    FROM your_table
)
DELETE FROM your_table
WHERE (id, rn) IN (SELECT id, rn FROM ranked_rows WHERE rn > 1);

SQL Server 场景

方案1:窗口函数直接删除

WITH ranked_rows AS (
    SELECT *,
           ROW_NUMBER() OVER (PARTITION BY id ORDER BY (SELECT NULL)) AS rn
    FROM your_table
)
DELETE FROM ranked_rows WHERE rn > 1;

方案2:循环删除重复项(适合低版本)

WHILE EXISTS (SELECT id FROM your_table GROUP BY id HAVING COUNT(*) > 1)
BEGIN
    DELETE TOP (1) FROM your_table
    WHERE id IN (SELECT id FROM your_table GROUP BY id HAVING COUNT(*) > 1)
END

通用兼容方案(无唯一列时)

如果表没有任何唯一标识列,可以通过临时表中转去重:

-- 创建临时表存储去重后的数据
CREATE TABLE temp_table AS
SELECT DISTINCT * FROM your_table;

-- 清空原表
TRUNCATE TABLE your_table;

-- 将去重数据插回原表
INSERT INTO your_table SELECT * FROM temp_table;

-- 删除临时表
DROP TABLE temp_table;

注意:执行前请务必备份数据,避免数据丢失。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 16:55:01