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

基于多列与IsActive条件删除数据表重复记录

针对你遇到的重复记录去重需求,我整理了一套符合规则的解决方案,咱们一步步来看:

需求明确

先把你提供的重复数据整理成清晰的表格:

IDOrgNameTaxIDIsActive备注
1Miller1111原始记录
1Miller1111重复项
1Miller1110重复项
1Miller1110重复项
2XYZ2220原始记录
2XYZ2220重复项

核心规则:

  • 对ID、OrgName、TaxID完全相同的重复组,优先保留IsActive=1的记录,删除同组内其他所有重复项
  • 若组内无IsActive=1的记录,暂不处理(待后续需求补充后再调整)
解决方案(以SQL为例)

假设你的数据表名为your_table,可以根据数据库版本选择以下两种方法:

方法1:窗口函数实现(推荐,适配MySQL 8.0+、PostgreSQL、SQL Server等现代数据库)

WITH ranked_records AS (
    SELECT 
        ID, OrgName, TaxID, IsActive,
        -- 给每组记录排序:IsActive=1的排第1位,其余按ID排序(可根据需求调整)
        ROW_NUMBER() OVER (
            PARTITION BY ID, OrgName, TaxID 
            ORDER BY IsActive DESC, ID
        ) AS row_num
    FROM your_table
)
DELETE FROM your_table
WHERE (ID, OrgName, TaxID, IsActive) IN (
    SELECT ID, OrgName, TaxID, IsActive
    FROM ranked_records
    WHERE row_num > 1
);

代码说明

  • PARTITION BY ID, OrgName, TaxID:把数据按这三个字段分组,确保同一组是完全重复的记录
  • ORDER BY IsActive DESC:强制让IsActive=1的记录排在同组最前面(1的优先级高于0)
  • row_num > 1:筛选出同组内非第一条的记录,也就是需要删除的重复项

方法2:关联删除(适配不支持窗口函数的旧版数据库)

DELETE t1
FROM your_table t1
JOIN your_table t2
    ON t1.ID = t2.ID 
    AND t1.OrgName = t2.OrgName 
    AND t1.TaxID = t2.TaxID
WHERE 
    -- 仅删除组内存在IsActive=1,但自身IsActive≠1的重复项
    t2.IsActive = 1 AND t1.IsActive != 1;

代码说明

  • 通过自连接匹配同组的重复记录
  • 只处理存在IsActive=1的组,删除组内所有非激活状态的重复项;对于没有IsActive=1的组(比如ID=2的XYZ组),不会做任何删除操作,留待后续需求补充后调整
执行后预期结果

处理完成后,你的数据表会变成:

IDOrgNameTaxIDIsActive
1Miller1111
2XYZ2220

完全符合你要求的保留规则。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:27:20