首頁 >資料庫 >mysql教程 >如何刪除沒有唯一 ID 的表中的重複行?

如何刪除沒有唯一 ID 的表中的重複行?

Barbara Streisand
Barbara Streisand原創
2025-01-23 01:47:09321瀏覽

How to Delete Duplicate Rows in a Table Without a Unique ID?

無須唯一 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>

讓我們分解這個查詢:

  • 名為「CTE」的 CTE 使用 ROW_NUMBER() 函數,根據「col1」欄位中的每個不同值計算行號,同時依該列進行分割。
  • DELETE 語句隨後刪除行號 (RN) 大於 1 的行,從而刪除所有重複行。

注意:您在原始貼文中提供的結果可能有所不同,因為可能存在錯字。上面的輸出代表期望的結果。

此技術的靈活性允許在 PARTITION BY 子句中包含多個列,從而能夠根據多種條件組合檢測重複項。

以上是如何刪除沒有唯一 ID 的表中的重複行?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn