仅基于某列删除TSQL中的重复行

18

可能是重复问题:
SQL - 如何删除重复行?

例如,这是我的表:

SiteKey, Name, City

SiteKey 是自增的,Name 不同,但有时 2 个 SiteKey 会有相同的 City。

例如:

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

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

这是在SQL 2005及以上版本中。

感谢您的帮助。


1
这是一个回答你问题的链接:https://dev59.com/dXVD5IYBdhLWcg3wU56H - Tom Studee
2个回答

13
以下是两种实现方法。
注:保留HTML标签。
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

4

这是标准的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
@Ken Le:“不工作”?它怎么不工作了... - gbn
nvm,但我尝试使用LEFT OUTER Join并删除具有null的列,它可以工作...感谢您的帮助tpp,gbn。祝你有美好的一天。 - Ken Le
1
@gbn -- 这不起作用是因为你在WHERE子句中命名了子查询 -- 只需删除“KeepMe”,它就可以正常工作。否则,很好的解决方案,无论如何都+1赞成唯一约束条件 :-) - Chains

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接