我有一张看起来像这样的表
表1
我,姓名
如何编写一个查询,删除所有具有重复名称的行,但保留具有较低Id的行?
答案 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