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

Oracle SQL删除除procurement_type外其余字段相同的重复行

Oracle SQL 重复行删除实现

针对「除procurement_type字段取值不同外,其余字段完全一致的重复数据,仅保留单条、删除其余重复项」的需求,可通过Oracle窗口函数实现,语句如下:

-- 操作提示:正式执行删除前,可先将外层DELETE替换为SELECT * 校验待删除数据范围,避免误删
DELETE FROM 你的业务表名 t
WHERE t.ROWID IN (
    SELECT tmp.rid
    FROM (
        SELECT
            ROWID rid,
            ROW_NUMBER() OVER(
                -- 按除procurement_type外的所有业务字段分区,判断重复
                PARTITION BY 字段A, 字段B, 字段C, 字段D -- 替换为业务表中除procurement_type外的全部字段
                -- 排序规则决定同组内保留哪条数据,可按需调整
                ORDER BY procurement_type
            ) rn
        FROM 你的业务表名
    ) tmp
    WHERE tmp.rn > 1 -- 删除同组内排序后序号大于1的重复行
);

-- 确认删除结果无误后执行提交
COMMIT;

自定义保留规则

如果需要固定保留某类procurement_type取值的行,只需要调整窗口函数内的ORDER BY逻辑即可,例如要固定保留procurement_type值为STANDARD_BID的行,可将排序部分改写为:

ORDER BY CASE WHEN procurement_type = 'STANDARD_BID' THEN 0 ELSE 1 END

注意事项

  • PARTITION BY后必须列全除procurement_type外的所有字段,否则会出现重复判定错误
  • 生产环境执行删除前务必备份相关数据,先校验待删除数据集再执行提交操作

示例数据参考

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 14:39:18