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


可能重复:
SQL - 如何删除重复的行? 

这是我的表:

SiteKey,名称,城市

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

例:

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

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

它在SQL 2005及以上。

谢谢你的帮助。


12
2017-07-21 16:45


起源


这是一个回答你的问题的链接: stackoverflow.com/questions/18932/... - Tom Studee


答案:


这有两种方法可以做到。

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

12
2017-07-21 17:43



使用EXISTS的好例子 - Chains


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

4
2017-07-21 16:51



在SQL 2005 Query上,标准SQL对我不起作用。 - Ken Le
@Ken Le:“不行”?怎么不行...... - gbn
nvm,但我尝试使用LEFT OUTER加入并删除列有null,它的工作......谢谢你的帮助tpp,gbn。祝你今天愉快。 - Ken Le
@gbn - 它没有用,因为你在WHERE中命名了你的子查询 - 只需删除'KeepMe'就行了。否则,很好的解决方案,并且+1无论如何为唯一约束:-) - Chains