首頁 > 資料庫 > mysql教程 > 當目標表位於 FROM 子句中時,如何​​刪除 MySQL 表中的重複行?

當目標表位於 FROM 子句中時,如何​​刪除 MySQL 表中的重複行?

DDD
發布: 2024-11-01 11:15:30
原創
379 人瀏覽過

How to Delete Duplicate Rows in a MySQL Table When the Target Table is in the FROM Clause?

從MySQL 中的表中刪除重複行

處理包含重複記錄的表時,有必要刪除它們以維護資料誠信和效率。在 MySQL 中,實現這一點涉及識別和刪除重複行,這個過程可以透過特定查詢來完成。

在您的例子中,您已經使用以下查詢根據字段empssn 確定了重複記錄:

SELECT COUNT(empssn), empssn FROM employee 
GROUP BY empssn 
HAVING COUNT(empssn) > 1
登入後複製

要刪除重複記錄,您嘗試了以下查詢:

DELETE FROM employee 
WHERE (empid, empssn) NOT IN (
    SELECT MIN(empid), empssn FROM employee 
    GROUP BY empssn
);
登入後複製

但是,您遇到了錯誤,因為MySQL 不允許要在更新查詢的FROM 子句中指定的目標表。

要解決此問題,一種方法是將子查詢包裝在派生表中:

DELETE FROM employee 
WHERE (empid, empssn) NOT IN (
    SELECT empid, empssn FROM (
        SELECT MIN(empid) AS empid, empssn FROM employee 
        GROUP BY empssn
    ) X
);
登入後複製

透過使用此修改查詢後,您可以有效地建立一個臨時的派生表(X),其中包含來自員工表的必要資料。然後,主 DELETE 查詢可以引用此衍生表,根據 empid 和 empssn 的唯一組合刪除重複行。此方法應該可以解決您遇到的錯誤,並允許您成功刪除重複記錄。

以上是當目標表位於 FROM 子句中時,如何​​刪除 MySQL 表中的重複行?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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