最近在作一個批量數據導入到MySQL數據庫的功能,從批量導入就能夠知道,這樣的數據在插入數據庫以前是不會進行重複判斷的,所以只有在所有數據導入進去之後在執行一條語句進行刪除,保證數據惟一性。數據庫
代表:brandspa
SELECT * from brand WHERE brandName IN( select brandName from brand GROUP BY brandName HAVING COUNT(brandName)>1 #條件是數量大於1的重複數據 )
錯誤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」code
緣由是:不能將直接查處來的數據當作刪除數據的條件,咱們應該先把查出來的數據新建一個臨時表,而後再把臨時表做爲條件進行刪除功能blog
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)
#查詢顯示重複的數據都是顯示最前面的幾條,所以不須要查詢是否最小值
這是老飛飛的前輩給了一個更加方便,簡潔的寫法(很是感謝大佬的方法):ci
DELETE FROM brand WHERE Id NOT IN (SELECT Id FROM (SELECT MIN(Id) AS Id FROM brand GROUP BY brandName) t)
這句的意思其實就是,經過分組統計出數據庫中不重複的最小數據id編號,讓後經過 not in 去刪除其餘重複多餘的數據。資源
不少東西都是須要本身一步一步的去探究的,固然網上的建議也是很是寶貴的借鑑和資源,不管作什麼開發咱們都須要理解它的工做原理纔可以更好的掌握它。開發