问题
群友提问: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;
(最终结果)