【问题标题】:Delete duplicate sql entries based on distinct Primary Key根据不同的主键删除重复的sql条目
【发布时间】: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

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

【问题讨论】:

    标签: sql sql-server distinct sql-delete


    【解决方案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 上创建唯一约束以防止重复。
    猜你喜欢
    • 1970-01-01
    • 2020-07-15
    • 2023-01-11
    • 2017-02-12
    • 1970-01-01
    • 2021-06-02
    • 2017-04-30
    • 2012-08-13
    • 2012-05-19
    相关资源
    最近更新 更多