如何保留重复记录中的第一条(最小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
相关产品推荐
相关产品推荐

