使用 T-SQL 刪除 SQL Server 中的重複行
本指南示範如何使用 T-SQL 有效地從 SQL Server 表中刪除重複行,並專注於特定列。 讓我們使用帶有 Employee
列的 EmployeeName
表作為範例。 目標是僅保留每個唯一員工姓名的一個實例。
一種穩健的方法利用視窗函數。以下查詢可完成此操作:
<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
值的群組(分區)中的每一行分配唯一的排名。 PARTITION BY EmployeeName
子句將行分組,ORDER BY empId
決定每組內的排名順序(假設 empId
是唯一識別碼)。 rn
代表等級。
WHERE rn > 1
子句針對每組內排名大於 1 的行,有效刪除除第一次出現(排名為 1)之外的所有重複項。
在執行DELETE
語句之前,預覽將受影響的行至關重要。 將 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>
這允許在永久刪除任何資料之前進行驗證。
以上是如何使用T-SQL有效率地刪除SQL Server中的重複記錄?的詳細內容。更多資訊請關注PHP中文網其他相關文章!