群友提問:MySQL這樣刪除重複數據為啥不成功呢?
嚴小樣兒:安排!
咋一看,大家都說where子句裡面應該使用極值函數,加個max就對了,這麼簡單!# 大家想像中這樣寫是對的,其實仍然是錯的!delete from p1 where id<(select max(id) from p1 b where p1.name=b.name);看到這裡,很多經常寫sql但是又不太精通sql的人都會說:納尼??!尤其是經常使用Oracle的同學,更是百思不得其解!
MySQL這樣寫的確是錯的,Oracle這樣寫應該沒問題!接下來,我們來研究一番,到底如何以這樣的方式去重呢?!安排一、預覽數據二、查重複值SELECT * FROM t WHERE t.ID < (SELECT MAX(m.ID)FROM t m WHERE m.NAME = t.NAME AND m.PRICE = t.PRICE);(重複值結果)
也就是說,利用上面的SQL語句可以查詢到哪些是重複數據。
然而,在它前面加個delete卻不能刪除重複值!
DELETE FROM t WHERE t.ID < (SELECT MAX(m.ID) FROM t m WHERE m.NAME=t.NAME AND m.PRICE = t.PRICE);(報錯截圖)
三、正確答案delete from t where t.id in (select r.* from (select id from t where t.id < (select max( m.id ) from t m where m.name = t.name ) ) r ); SELECT * FROM t;MySQL不能直接在查詢結果中進行刪除操作,需要先建立一個臨時表。更多精彩
祝福大家2020一夜暴富!