無須唯一 ID 刪除重複行
如果表中沒有唯一的行標識符,我們該如何刪除重複行?假設我們有一個包含以下數據的表格:
<code>| 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 |</code>
我們的目標是消除重複行,留下:
<code>| col1 | col2 | col3 | col4 | col5 | col6 | col7 | |---|---|---|---|---|---|---| | john | 1 | 1 | 1 | 1 | 1 | 1 | | sally | 2 | 2 | 2 | 2 | 2 | 2 |</code>
一種可靠的方法,可以避免缺少唯一 ID 的問題,就是使用公用表表達式 (CTE) 和 ROW_NUMBER() 函數。這種組合允許我們識別哪些行應該被刪除:
<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) FROM dbo.Table1 ) DELETE FROM CTE WHERE RN > 1</code>
讓我們分解這個查詢:
注意:您在原始貼文中提供的結果可能有所不同,因為可能存在錯字。上面的輸出代表期望的結果。
此技術的靈活性允許在 PARTITION BY 子句中包含多個列,從而能夠根據多種條件組合檢測重複項。
以上是如何刪除沒有唯一 ID 的表中的重複行?的詳細內容。更多資訊請關注PHP中文網其他相關文章!