SQL删除指定条件的重复数据,只保留一条

DECLARE @Count INT = 1WHILE @Count > 0BEGINDELETE TB FROM TableName TB WHERE TB.ID IN (SELECT MIN(ID) FROM TableName TB2GROUP BY TB2.Column1,TB2.Column2,...TB2.ColumnNHAVING COUNT(1) > 1);SET @Count = @@ROWCOUNT;END
这里使用了循环删除,并不是最优的方法,欢迎园友不吝批评指正 。
其实还有一种方法是先查询重复的数据,然后在重复数据中保留一条 。下面用例子说明 。

SQL删除指定条件的重复数据,只保留一条

文章插图
例如表City有如下的数据:
SQL删除指定条件的重复数据,只保留一条

文章插图
查询出重复的数据,Id只保留其中一个
SQL删除指定条件的重复数据,只保留一条

文章插图
SELECT MIN(Id) Id,Name FROM dbo.City GROUP BY NameHAVING COUNT(1) >1
然后使用删除时Join上面的表
【SQL删除指定条件的重复数据,只保留一条】DELETE C FROM City C JOIN (SELECT MIN(Id) Id,Name FROM dbo.CityGROUP BY NameHAVING COUNT(1) >1) TMP ON C.Name = TMP.Name AND C.Id <> TMP.Id
另外一种方法是园友指出的使用()来处理,感谢提供思路,这也是一种方法 。