高效率刪除 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>
詳細說明:
CTE,恰當地命名為 RowNumberedRows
,為表中的每一行分配一個唯一的行號 (RN
)。 ROW_NUMBER()
函數根據 col1
列對行進行分區,並在每個分區內分配順序編號。 這可確保每個重複組的第一次出現的 RN
為 1。
然後,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中文網其他相關文章!