根据不同的主键删除重复的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
【讨论】:
然后在ID
和 Account Name
上创建唯一约束以防止重复。以上是关于根据不同的主键删除重复的sql条目的主要内容,如果未能解决你的问题,请参考以下文章