SQL Server での重複行の効率的な削除: CTE アプローチ
一意のキーが欠落している SQL Server テーブルを扱う場合、重複行を削除するには戦略的なアプローチが必要です。 これは、共通テーブル式 (CTE) を ROW_NUMBER()
関数と組み合わせて使用すると効果的に実現できます。
このテクニックを実証するソリューションは次のとおりです:
<code class="language-sql">WITH RowNumberedRows AS ( SELECT [col1], [col2], [col3], [col4], [col5], [col6], [col7], RN = ROW_NUMBER() OVER (PARTITION BY col1 ORDER BY col1) FROM dbo.Table1 ) DELETE FROM RowNumberedRows WHERE RN > 1;</code>
詳細な説明:
RowNumberedRows
という名前の CTE は、テーブル内の各行に一意の行番号 (RN
) を割り当てます。 ROW_NUMBER()
関数は、col1
列に基づいて行を分割し、各パーティション内に連続番号を割り当てます。 これにより、各重複グループの最初の出現が 1 の RN
を受け取るようになります。
次に、DELETE
ステートメントは CTE をターゲットにし、RN
が 1 より大きい行をすべて削除します。これにより、各重複セットの最初の行のみが残り、効果的に重複が削除されます。
例:
このクエリをサンプル データに適用すると、次の結果が得られます:
COL1 | COL2 | COL3 | COL4 | COL5 | COL6 | COL7 |
---|---|---|---|---|---|---|
john | 1 | 1 | 1 | 1 | 1 | 1 |
sally | 2 | 2 | 2 | 2 | 2 | 2 |
重複した「john」行が正常に削除されたことを確認します。
この方法の適応性は注目に値します。 ROW_NUMBER()
関数 (PARTITION BY col1, col2
など) 内のパーティション分割列を調整することで、必要に応じて複数の列に基づいて一意性を定義できます。
以上が一意のキーを持たずに SQL Server で重複する行を削除するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。