ホームページ >データベース >mysql チュートリアル >ROW_NUMBER() を使用して SQL Server で重複レコードを削除する方法

ROW_NUMBER() を使用して SQL Server で重複レコードを削除する方法

Patricia Arquette
Patricia Arquetteオリジナル
2025-01-12 12:01:46329ブラウズ

How to Delete Duplicate Records in SQL Server Using ROW_NUMBER()?

データの整合性: SQL Server の重複エントリの削除

クリーンで効率的なデータベースを維持するには、重複レコードを定期的に削除する必要があります。 これは、データの整合性と最適なデータベースのパフォーマンスにとって不可欠です。 同一のエントリが存在する場合 (たとえば、同じ名前の複数の従業員)、重複を排除することが重要です。

SQL Server は、ウィンドウ関数と DELETE ステートメントを使用した強力なソリューションを提供します。 ウィンドウ関数は、関連する行全体で計算を実行する機能を提供します。

説明のために、EmployeeName 列に基づいて重複エントリを削除することを考えてみましょう。 ROW_NUMBER() 関数は、パーティション (同一の EmployeeName 値のグループ) 内の各行に一意のランクを割り当てます。 これにより、重複を選択的に削除できます。

T-SQL クエリは次のとおりです。

<code class="language-sql">DELETE x
FROM (
    SELECT *, RN = ROW_NUMBER() OVER (PARTITION BY EmployeeName ORDER BY empId)
    FROM Employee
) x
WHERE RN > 1;</code>

このクエリは次のように機能します。サブクエリは、ROW_NUMBER() でパーティション化され、EmployeeName で順序付けされた empId を適用して、一時テーブルを作成します。これにより、各従業員名に一意のランク (RN) が割り当てられ、重複したものには順番に番号が付けられます。

DELETE ステートメントは、この一時テーブル (別名「x」) をターゲットにし、RN が 1 より大きいすべての行を削除します。これにより、各 EmployeeName の最初のインスタンスのみが事実上保持され、後続の重複はすべて削除されます。

実行前の検証:

DELETE ステートメントを実行する前に、その影響を検証することが重要です。 次の SELECT ステートメントを実行します:

<code class="language-sql">SELECT *
FROM (
    SELECT *, RN = ROW_NUMBER() OVER (PARTITION BY EmployeeName ORDER BY empId)
    FROM Employee
) x
WHERE RN > 1;</code>

これにより、削除予定のレコードがプレビューされます。 正確さを確認したら、DELETE ステートメントを実行して、Employee テーブルから重複レコードを完全に削除します。

以上がROW_NUMBER() を使用して SQL Server で重複レコードを削除する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。