【问题标题】:TSQL Remove duplicated rows on some column only [duplicate]TSQL仅删除某些列上的重复行[重复]
【发布时间】:2011-10-10 10:01:33
【问题描述】:

可能重复:
SQL - How can I remove duplicate rows?

例如这是我的桌子:

SiteKey、名称、城市

SiteKey 是自动递增的,名称不同,但有时 2 个 SiteKey 会具有相同的城市。

例子:

1, A , CityA
2, B,  CityB
3, C,  CityA
4, D,  CityF

所以我需要删除第 3 行,只保留第 1、2、4 行。

它在 SQL 2005 及更高版本上。

感谢您的帮助。

【问题讨论】:

标签: sql tsql


【解决方案1】:

这里有两种方法可以做到。

DELETE t
FROM 
<table> t
WHERE EXISTS 
    (SELECT 1 FROM <table> 
    WHERE t.SiteKey > SiteKey AND t.City = City)


DELETE t
FROM 
<table> t
INNER JOIN <table> t2
ON  t.City = t2.City
AND t.SiteKey > SiteKey

【讨论】:

    【解决方案2】:

    这是标准 SQL

    DELETE
       mytable
    WHERE
        SiteKey NOT IN 
        (
        SELECT
           MIN(SiteKey)
        FROM
           Mytable
        GROUP BY
           City
        ) --Don't need 'KeepMe'
    

    然后,添加唯一约束

    ALTER TABLE MyTable WITH CHECK ADD
       CONSTRAINT UQ_MyTable_City UNIQUE (City)
    

    【讨论】:

    • 标准 SQL 不适用于我的 SQL 2005 查询。
    • @Ken Le:“不工作”?怎么不行……
    • nvm ,但我尝试使用 LEFT OUTER Join 并删除列有 null,它的工作......谢谢你的帮助 tpp,gbn。祝你有美好的一天。
    • @gbn -- 它不起作用,因为您在 WHERE 中命名了子查询 -- 只需删除“KeepMe”就可以了。否则,很好的解决方案,无论如何都要为唯一约束 +1 :-)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-02-25
    • 2020-10-10
    • 2021-01-20
    • 2016-11-21
    • 2015-04-01
    • 2017-05-07
    • 2021-05-14
    相关资源
    最近更新 更多