mySql數據重復數據去重


1、問題來源:數據中由於並發問題,數據存在多次調用接口,插入了重復數據,需要根據多條件刪除重復數據;

2、參考博客文章地址:https://www.cnblogs.com/jiangxiaobo/p/6589541.html

二、

1、刪除數據之前,先要查找到重復的數據,有一張單位表,單位名稱可以重復,但是在不同組織id下不能重復(多條件計數重復數據),統計一下重復的數據

根據條件進行數據統計,然后選出記錄數大於1的記錄,看一下哪些數據是重復的數據:

SELECT
    count( company_name ) countNum,
    company_name,
    org_id 
FROM
    company 
GROUP BY
    company_name,
    org_id 
HAVING
    countNum > 1 
ORDER BY
    countNum DESC

 查詢結果

2、刪除重復數據:根據數據查詢出的條件篩選出重復數據的id,然后將id最小的排除掉,然后刪除這些重復數據,中間由於數據庫版本的問題,不能直接在查詢表的數據刪除數據

所以需要將查詢的重復的記錄作為一個子查詢,起一個別名,然后再進行刪除

delete from company WHERE id in (
SELECT t.id FROM (
select id 
FROM
    company a
WHERE
    (a.company_name, a.org_id) IN (
        SELECT
            company_name,
            org_id
        FROM
            company
        GROUP BY
            company_name,
            org_id
        HAVING
            count(*) > 1
    )
AND id NOT IN (
    SELECT
        min(id)
    FROM
        company
    GROUP BY
        company_name,
        org_id
    HAVING
        count(*) > 1
)) t)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM