0

I have tried,

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
);

but its deleting both duplicate records. please correct my query. thanks in advance.

Vishwanath Dalvi
  • 35,388
  • 41
  • 123
  • 155

2 Answers2

2

You can use 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;
M. Rezaeyan
  • 388
  • 2
  • 14
0

You're deleting based on FirstName hence it's deleting all the records from your table, try like this will do.

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;
Vishwanath Dalvi
  • 35,388
  • 41
  • 123
  • 155