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

DB2数据库如何删除指定字段重复的冗余行并保留首条原始行

DB2删除重复冗余行最优实现方案

核心实现语句

直接基于DB2内置的RID()行唯一标识函数配合窗口函数实现,无需依赖表主键,执行效率高:

DELETE FROM mytable
WHERE RID(mytable) IN (
    SELECT rid
    FROM (
        SELECT 
            RID(mytable) AS rid,
            ROW_NUMBER() OVER(PARTITION BY Week, Value1, Value2 ORDER BY Week, Value1, Value2) AS row_num
        FROM mytable
    ) t
    WHERE t.row_num > 1
);

语法说明

  • RID(mytable)是DB2内置函数,会返回表中每一行的唯一物理/逻辑标识,不需要表预先定义主键即可使用
  • 内层子查询先给每个Week+Value1+Value2分组的行排序打标,第一次出现的行row_num=1,后续重复行row_num大于1
  • 外层DELETE直接匹配所有重复行的RID完成删除

注意事项

执行删除前建议先运行如下语句确认要删除的行是否符合预期,避免误删数据:

SELECT * FROM mytable
WHERE RID(mytable) IN (
    SELECT rid
    FROM (
        SELECT 
            RID(mytable) AS rid,
            ROW_NUMBER() OVER(PARTITION BY Week, Value1, Value2 ORDER BY Week, Value1, Value2) AS row_num
        FROM mytable
    ) t
    WHERE t.row_num > 1
);

若表数据量极大,建议先备份表数据再执行删除操作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 22:45:03