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
相关产品推荐
相关产品推荐

