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)