首頁 > 資料庫 > mysql教程 > 如何在沒有唯一標識符的情況下有效地從表中刪除重複行?

如何在沒有唯一標識符的情況下有效地從表中刪除重複行?

Susan Sarandon
發布: 2025-01-23 01:41:08
原創
597 人瀏覽過

How to Efficiently Remove Duplicate Rows from a Table Without Unique Identifiers?

高效率刪除無唯一識別碼的重複行

當資料表缺少唯一行識別碼時,刪除重複項可能是一項挑戰。本文提供了一種有效的解決方案,用於刪除重複行,同時保留第一次出現的行。

讓我們來看一個包含重複行的表格:

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>
登入後複製

說明:

  • CTE 建立: WITH 語句建立一個名為 CTE 的 CTE,其中包含表的列,並使用 ROW_NUMBER() 函數為每一行分配 RN 值。 PARTITION BY 子句根據 col1 列對行進行分組,並在每個組內對它們進行排序以確定順序。
  • ROW_NUMBER() 函數: ROW_NUMBER() 函數為 PARTITION BY 子句定義的每個分區內的每一行產生一個從 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

以上是如何在沒有唯一標識符的情況下有效地從表中刪除重複行?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板