根据不同的主键删除重复的sql条目

Posted

技术标签:

【中文标题】根据不同的主键删除重复的sql条目【英文标题】:Delete duplicate sql entries based on distinct Primary Key 【发布时间】:2014-06-12 16:17:05 【问题描述】:

我有这个包含 3 列的表:ID、帐户名称和主键。有些条目重复了,其中 ID 和帐户名称相同,但 PK(即主键)已增加。

我希望能够删除所有重复条目,除了具有最低 PK(主键)的条目。

以下是我为检索这些数据而编写的查询的结果示例:

ID          Account Name            PK
18380        _srvSQL               1724
18380        _srvSQL               8454
18380        _srvSQL              10333
18380        _srvSQL               9903
18380        _srvSQL              10274
20993        _svc_MOSS_search      2595
20993        _svc_MOSS_search      9235
21020        _svc_MOSS_WSS         2589
21020        _svc_MOSS_WSS         9244
22251        _SVC_QA_SP_PortalAP   3659
22251        _SVC_QA_SP_PortalAP   9590
22681        _Svc_SQL_AS_Prod      4269
22681        _Svc_SQL_AS_Prod      9678
20136        _svcBIAdmin           1628
20136        _svcBIAdmin          11080
20136        _svcBIAdmin           8913
18456        _svcBizTalk           9923
18456        _svcBizTalk          10294
18456        _svcBizTalk          10353

所以我可以看到所有重复的条目及其不同的主键,如何从表中删除除主键最低的条目之外的所有条目?

【问题讨论】:

【参考方案1】:
WITH t AS (SELECT ROW_NUMBER() OVER(PARTITION BY ID ORDER BY PK) n FROM MyTable)
DELETE FROM t WHERE n > 1

【讨论】:

然后在 IDAccount Name 上创建唯一约束以防止重复。

以上是关于根据不同的主键删除重复的sql条目的主要内容,如果未能解决你的问题,请参考以下文章

sql语句查询出的两行数据除了主键其他都一样,怎么去掉重复数据

如何避免没有主键和唯一键的重复条目?

解决 mysql 导入时重复的主键

Mysql主键的重复条目(AUTO_INCREMENT)

如何处理重复条目的错误?

sql 查找因主键(PK)违规而可能阻止查询的所有重复条目