zoukankan      html  css  js  c++  java
  • SQL删除指定条件的重复数据,只保留一条

    DECLARE @Count INT = 1
    WHILE @Count > 0
    BEGIN
    DELETE TB FROM TableName TB 
    WHERE TB.ID IN (SELECT MIN(ID) FROM TableName TB2
    GROUP BY TB2.Column1,TB2.Column2,...TB2.ColumnN
    HAVING COUNT(1) > 1);
    SET @Count = @@ROWCOUNT;
    END

    这里使用了循环删除,并不是最优的方法,欢迎园友不吝批评指正。 


    其实还有一种方法是先查询重复的数据,然后在重复数据中保留一条。 下面用例子说明。

    例如表City有如下的数据:

    查询出重复的数据,Id只保留其中一个

    SELECT MIN(Id) Id,Name FROM dbo.City 
    GROUP BY Name
    HAVING COUNT(1) >  1

    然后使用删除时Join上面的表

    DELETE C FROM City C 
    JOIN (
        SELECT MIN(Id) Id,Name FROM dbo.City
        GROUP BY Name
        HAVING COUNT(1) >  1
    ) TMP ON C.Name = TMP.Name AND C.Id <> TMP.Id

    另外一种方法是园友Adeal2008指出的使用row_number()来处理,感谢Adeal2008提供思路,这也是一种方法。

  • 相关阅读:
    SimpleXML简单使用
    制作RSS供应源
    DOM方式操作XML
    Referer与图片防盗链
    PAT
    Margarite and the best present
    Petya and Origami
    Margarite and the best present
    Petya and Origami
    A/B
  • 原文地址:https://www.cnblogs.com/godbell/p/8727804.html
Copyright © 2011-2022 走看看