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

如何选择或删除SQL重复数据行且保留其中一条记录?

SQL重复数据行处理需求与实现方案

需求说明

无需清空全表数据,仅删除SQL表内多余的重复数据行,每组重复项仅保留1条即可,具体示例如下:
原始表数据:

username ip_address

a 127.0.0.1
b 127.0.0.2
c 127.0.0.3
d 127.0.0.4 < 重复项 保留
d 127.0.0.4 < 重复项 需删除
e 127.0.0.5
d 127.0.0.4 < 重复项 需删除

需要筛选/删除的目标重复数据:

username ip_address

d 127.0.0.4
d 127.0.0.4

实现方案

方案1:临时表法(兼容性强,适配绝大多数数据库)

操作步骤如下:

  • 创建临时表存储原表去重后的数据
CREATE TABLE temp_table AS SELECT DISTINCT * FROM 你的表名;
  • 清空原表数据
TRUNCATE TABLE 你的表名;
  • 将临时表中去重后的数据回写到原表
INSERT INTO 你的表名 SELECT * FROM temp_table;
  • 清理临时表
DROP TABLE temp_table;

方案2:窗口函数法(无需临时表,适配支持窗口函数的数据库,如MySQL 8.0+、PostgreSQL、SQL Server等)

DELETE t1 FROM 你的表名 t1
JOIN (
    SELECT 
        主键字段,
        ROW_NUMBER() OVER (PARTITION BY username, ip_address ORDER BY (SELECT NULL)) AS row_num
    FROM 你的表名
) t2 ON t1.主键字段 = t2.主键字段
WHERE t2.row_num > 1;

注:将语句中你的表名、主键字段替换为实际的表名、表主键字段名即可,PARTITION BY后可按实际判断重复的字段调整

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 19:54:08