MySQL查詢重複資料(刪除重複資料保留id最小的一條為唯一資料)
阿新 • • 發佈:2020-01-09
開發背景:
最近在做一個批量資料匯入到MySQL資料庫的功能,從批量匯入就可以知道,這樣的資料在插入資料庫之前是不會進行重複判斷的,因此只有在全部資料匯入進去以後在執行一條語句進行刪除,保證資料唯一性。
下面話不多說了,來一起看看詳細的介紹吧
實戰:
表結構如下圖所示:
表明:brand
操作:
使用SQL語句查詢重複的資料有哪些:
SELECT * from brand WHERE brandName IN( select brandName from brand GROUP BY brandName HAVING COUNT(brandName)>1 #條件是數量大於1的重複資料 )
使用SQL刪除多餘的重複資料,並保留Id最小的一條唯一資料:
注意點:
錯誤SQL:DELETE FROM brand WHERE brandName IN (select brandName from brand GROUP BY brandName HAVING COUNT(brandName)>1)
AND Id NOT IN (select MIN(Id) from brand GROUP BY brandName HAVING COUNT(brandName)>1)
提示: You can't specify target table 'brand' for update in FROM clause 不能為FROM子句中的更新指定目標表“brand”
原因是:不能將直接查處來的資料當做刪除資料的條件,我們應該先把查出來的資料新建一個臨時表,然後再把臨時表作為條件進行刪除功能
正確SQL寫法: DELETE FROM brand WHERE brandName IN (SELECT brandName FROM (SELECT brandName FROM brand GROUP BY brandName HAVING COUNT(brandName)>1) e) AND Id NOT IN (SELECT Id FROM (SELECT MIN(Id) AS Id FROM brand GROUP BY brandName HAVING COUNT(brandName)>1) t) #查詢顯示重複的資料都是顯示最前面的幾條,因此不需要查詢是否最小值
結果如下圖:
總結:
很多東西都是需要自己一步一步的去探究的,當然網上的建議也是非常寶貴的借鑑和資源,無論做什麼開發我們都需要理解它的工作原理才能夠更好的掌握它。
好了,以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對我們的支援。