データの整合性: 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 サイトの他の関連記事を参照してください。