sql >> データベース >  >> RDS >> Sqlserver

SQL Serverで重複する行を削除するにはどうすればよいですか?

    CTEとROW_NUMBERが好きです 2つを組み合わせると、どの行が削除(または更新)されたかを確認できるため、DELETE FROM CTE...を変更するだけです。 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
    

    デモ (結果は異なります。タイプミスが原因だと思います)

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

    この例では、単一の列col1によって重複を判別します。 PARTITION BY col1のため 。複数の列を含める場合は、それらをPARTITION BYに追加するだけです。 :

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


    1. mysqlレプリケーション-マスターからスレーブ

    2. MySQLでいくつのテーブルを結合できますか?

    3. 1つのテーブルからすべてを取得し、別のテーブルからCOUNTを取得します

    4. なぜ外部注文が正しく機能しないのですか?