问题
群友提问:MySQL这样删除重复数据为啥不成功呢?
严小样儿:安排!

# 大家想象中这样写是对的,其实仍然是错的!delete from p1 where idfrom p1 b where p1.name=b.name);看到这里,很多经常写sql但是又不太精通sql的人都会说:纳尼??!尤其是经常使用Oracle的同学,更是百思不得其解!我在这里首先说一句:MySQL这样写的确是错的,Oracle这样写应该没问题!接下来,我们来研究一番,到底如何以这样的方式去重呢?!安排
(原始数据)
一、预览数据
SELECT * FROM t; # 结果如上二、查重复值
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 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不能直接在查询结果中进行删除操作,需要先建立一个临时表。更多精彩
传送门1:日常答疑|Python向量化操作、矩阵运算传送门2:日常答疑|Python处理时间格式并计算时间差值传送门3:分组排序求前三?TopN问题?一文教你MySQL各类排序操作传送门4:系列|七天PYTHON养成记之初识传送门5:系列|七天PYTHON养成记之函数