删除重复的行

时间:2011-05-29 04:08:52

标签: sql sql-server tsql

我有一张看起来像这样的表

  

表1

     

我,姓名

如何编写一个查询,删除所有具有重复名称的行,但保留具有较低Id的行?

3 个答案:

答案 0 :(得分:4)

如果您使用的是SQL Server 2005或更高版本:

With Dups As
    (
    Select Id, Name
        , Row_Number() Over ( Partition By Name Order By Id ) As Num
    From Table1
    )
Delete Table1
Where Id In (
            Select Id
            From Dups
            Where Num > 1
            )

如果使用SQL Server 2000及之前的

Delete Table1
Where Exists    (
                Select 1
                From Table1 As T1
                Where T1.Name = Table1.Name
                Having Min( T1.Id ) <> Table1.Id
                )

答案 1 :(得分:2)

可以使用简单的自联接查询删除重复项。下面的脚本可以帮到你。

delete t2
from Table1 t1
join Table1 t2
   on t1.Name = t2.Name
where t1.Id < t2.Id

此逻辑可用于需要删除重复项的情况。我们应该尽可能地避免使用“游标”,因为它会阻止表格。

答案 2 :(得分:0)

只需使用游标即可完成此操作 查询可能就像这样

声明@id int 声明@name nvarchar(30)

声明cr cursor为select id,idname来自idnametbl order by id

更新

open cr

从cr获取下一个@ id,@ name

而@@ fetch_status = 0

开始

从idnametbl中删除,其中id&gt; @id和name = @ name

从cr获取下一个@ id,@ name

关闭cr

deallocate cr