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

如何保留重复记录中的第一条(最小ID)记录并删除其余重复项

用表自连接实现保留最小ID、删除重复记录

可以通过表自连接实现需求,以下是具体实现方式:

表样例

ID          COL_A                               COL_B   what I need to do
24556552    KD PT PERSONAL TRAINING, AND 58 MOU 5691212 
24556924    KD PT PERSONAL TRAINING, AND 58 MOU 5691212 <-- remove
24556869    KHETSHI DHARAMSHI & CO LTD,         5690443 
24556951    KHETSHI DHARAMSHI & CO LTD,         5690443 <-- remove
24528435    KINNY TINT LDA                      5689791 
24528436    KINNY TINT LDA                      5689791 <-- remove
24528437    KINNY TINT LDA                      5689791 <-- remove
24528438    KINNY TINT LDA                      5689791 <-- remove
24528439    KINNY TINT LDA                      5689791 <-- remove

1. 查询需保留的记录(仅最小ID)

通过自连接筛选出每组(COL_A+COL_B相同)中ID最小的记录:

SELECT t1.*
FROM your_table t1
LEFT JOIN your_table t2
ON t1.COL_A = t2.COL_A 
AND t1.COL_B = t2.COL_B 
AND t1.ID > t2.ID
WHERE t2.ID IS NULL;

逻辑说明:将表与自身按重复字段关联,只保留找不到更小同组ID的记录,这类记录就是每组的最小ID记录。

2. 删除重复记录

MySQL 写法

直接通过自连接删除ID更大的重复项:

DELETE t1
FROM your_table t1
JOIN your_table t2
ON t1.COL_A = t2.COL_A 
AND t1.COL_B = t2.COL_B 
AND t1.ID > t2.ID;

SQL Server 写法

由于SQL Server限制同表直接删除,可通过子查询(自连接逻辑)实现:

DELETE t1
FROM your_table t1
WHERE EXISTS (
    SELECT 1
    FROM your_table t2
    WHERE t2.COL_A = t1.COL_A 
    AND t2.COL_B = t1.COL_B 
    AND t2.ID < t1.ID
);

注意事项

  • 执行删除操作前务必备份数据,避免误删
  • 确认COL_A和COL_B的组合是判断重复的准确依据
  • 若ID为自增主键,最小ID对应首次插入的记录,符合你“保留首次出现”的要求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 15:16:23