1. 程式人生 > 資料庫 >MySQL查詢重複資料(刪除重複資料保留id最小的一條為唯一資料)

MySQL查詢重複資料(刪除重複資料保留id最小的一條為唯一資料)

開發背景:

最近在做一個批量資料匯入到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)

#查詢顯示重複的資料都是顯示最前面的幾條,因此不需要查詢是否最小值

結果如下圖:


總結:

很多東西都是需要自己一步一步的去探究的,當然網上的建議也是非常寶貴的借鑑和資源,無論做什麼開發我們都需要理解它的工作原理才能夠更好的掌握它。

好了,以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對我們的支援。