2017-08-21 84 views
0

我都试过,如果每一个ID列的一个条目,删除重复项保持不可

delete from Student where FirstName in 
(
    select FirstName from 
    (
    select FirstName, 
    row_number() over(partition by FirstName order by FirstName) as rn 
    from Student 
    ) Student 
    WHERE rn > 1 
); 

但其都删除重复记录。 请纠正我的查询。 在此先感谢。

+0

标签您正在使用的数据库管理系统! – jarlh

+0

有表主键? –

+0

MS SQL SERVER ........ –

回答

2

您可以使用CTE

WITH MyCTE 
    AS 
    (
     SELECT [FirstName], ROW_NUMBER() OVER(PARTITION BY FirstName ORDER BY FirstName) RN 
     FROM Student 
    ) 
    DELETE FROM MyCTE WHERE RN > 1; 
    SELECT * FROM Students; 
+0

我觉得你需要“;”之前用WITH –

+0

其工作表示感谢。 –

0

你根据名字删除,因此它将从表中删除所有记录,尝试这样就行了。

Live Demo

WITH StudentCte 
As 
(
SELECT FirstName, ROW_NUMBER() OVER(Partition by FirstName ORDER BY (SELECT NULL)) as RowNum 
FROM Student 
) 

DELETE FROM StudentCte WHERE RowNum > 1; 

SELECT * 
From Student; 
+0

再次非常感谢。 –