How to delete duplicate rows in SQL Server?

后端 未结 23 1391
长情又很酷
长情又很酷 2020-11-22 00:58

How can I delete duplicate rows where no unique row id exists?

My table is

col1  col2 col3 col4 col5 col6 col7
john  1          


        
23条回答
  •  轻奢々
    轻奢々 (楼主)
    2020-11-22 01:40

    I like CTEs and ROW_NUMBER as the two combined allow us to see which rows are deleted (or updated), therefore just change the DELETE FROM CTE... to SELECT * FROM CTE:

    WITH CTE AS(
       SELECT [col1], [col2], [col3], [col4], [col5], [col6], [col7],
           RN = ROW_NUMBER()OVER(PARTITION BY col1 ORDER BY col1)
       FROM dbo.Table1
    )
    DELETE FROM CTE WHERE RN > 1
    

    DEMO (result is different; I assume that it's due to a typo on your part)

    COL1    COL2    COL3    COL4    COL5    COL6    COL7
    john    1        1       1       1       1       1
    sally   2        2       2       2       2       2
    

    This example determines duplicates by a single column col1 because of the PARTITION BY col1. If you want to include multiple columns simply add them to the PARTITION BY:

    ROW_NUMBER()OVER(PARTITION BY Col1, Col2, ... ORDER BY OrderColumn)
    

提交回复
热议问题