高效率刪除無唯一識別碼的重複行
當資料表缺少唯一行識別碼時,刪除重複項可能是一項挑戰。本文提供了一種有效的解決方案,用於刪除重複行,同時保留第一次出現的行。
讓我們來看一個包含重複行的表格:
col1 | col2 | col3 | col4 | col5 | col6 | col7 |
---|---|---|---|---|---|---|
john | 1 | 1 | 1 | 1 | 1 | 1 |
john | 1 | 1 | 1 | 1 | 1 | 1 |
sally | 2 | 2 | 2 | 2 | 2 | 2 |
sally | 2 | 2 | 2 | 2 | 2 | 2 |
刪除重複行後的期望結果是:
col1 | col2 | col3 | col4 | col5 | col6 | col7 |
---|---|---|---|---|---|---|
john | 1 | 1 | 1 | 1 | 1 | 1 |
sally | 2 | 2 | 2 | 2 | 2 | 2 |
使用 CTE 和 ROW_NUMBER 的解
此方法利用公用表表達式 (CTE) 和 ROW_NUMBER() 函數。 CTE 根據特定順序為每一行分配一個序號 (RN),從而允許我們識別和消除重複項。
以下是帶有步驟說明的 SQL 查詢:
<code class="language-sql">WITH CTE AS ( SELECT [col1], [col2], [col3], [col4], [col5], [col6], [col7], RN = ROW_NUMBER() OVER (PARTITION BY col1 ORDER BY col1) -- 为 col1 定义的每个组内分配序列号 FROM dbo.Table1 ) DELETE FROM CTE WHERE RN > 1; -- 删除 RN 大于 1 的行(表示重复项)</code>
說明:
輸出:
執行查詢後,更新後的表格將包含:
col1 | col2 | col3 | col4 | col5 | col6 | col7 |
---|---|---|---|---|---|---|
john | 1 | 1 | 1 | 1 | 1 | 1 |
sally | 2 | 2 | 2 | 2 | 2 | 2 |
以上是如何在沒有唯一標識符的情況下有效地從表中刪除重複行?的詳細內容。更多資訊請關注PHP中文網其他相關文章!