仅使用一个查询删除重复记录

Sac*_*hag 7 sql sql-server-2005

我正在使用SQL Server 2005.

我有一张这样的桌子 -

ID    Name
1      a
1      a
1      a
2      b
2      b
3      c
4      d
4      d
Run Code Online (Sandbox Code Playgroud)

在这里,我想删除所有重复的条目,并只保留一个实例 -

ID     Name
1       a
2       b
3       c
4       d
Run Code Online (Sandbox Code Playgroud)

我可以通过向此表添加另一个标识列并在其中包含唯一编号然后删除重复记录来轻松完成此操作.但是,我想知道是否可以删除重复记录而不向该表添加该附加列.

另外,如果只使用一个查询语句就可以完成此操作.即不使用存储过程或临时表.

Lie*_*ers 9

CTE中使用ROW_NUMBER可以删除重复值,同时保留唯一行.

WITH q AS (
  SELECT RN = ROW_NUMBER() OVER (PARTITION BY ID ORDER BY ID )
         , ID
         , Name
  FROM   ATable
)
DELETE FROM q WHERE RN > 1
Run Code Online (Sandbox Code Playgroud)