TSQL仅删除某些列上的重复行

TSQL仅删除某些列上的重复行,sql,tsql,Sql,Tsql,可能重复: 示例这是我的表格: SiteKey、名称、城市 SiteKey是自动递增的,名称不同,但有时2个SiteKey将具有相同的城市 例如: 1, A , CityA 2, B, CityB 3, C, CityA 4, D, CityF 所以我需要删除第3行,只保留第1、2、4行 它是基于SQL 2005和更高版本的 谢谢您的帮助。这是标准SQL DELETE mytable WHERE SiteKey NOT IN ( SELECT

可能重复:

示例这是我的表格:

SiteKey、名称、城市

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

例如:

1, A , CityA
2, B,  CityB
3, C,  CityA
4, D,  CityF
所以我需要删除第3行,只保留第1、2、4行

它是基于SQL 2005和更高版本的

谢谢您的帮助。

这是标准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)

这里有两种方法可以做到这一点

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

这里有一个链接,可以回答您的问题:在SQL 2005查询中,标准SQL不适用于我。@Ken Le:不适用?它是如何工作的…nvm,但我尝试使用左外连接和删除列have null,它的工作。。。谢谢你的帮助tpp,gbn。祝您有愉快的一天。@gbn-它不起作用,因为您在WHERE中命名了子查询-只需删除“KeepMe”,它就可以正常工作了。否则,该解决方案很好,对于唯一约束,无论如何为+1:-