mysql 删除重复数据_日常答疑|MySQL删除重复数据踩过得坑

问题

群友提问:MySQL这样删除重复数据为啥不成功呢?

严小样儿:安排!

4d3bb9dcd438bdfbd69144e40e71f80a.png

咋一看,大家都说where子句里面应该使用极值函数,加个max就对了,这么简单!
# 大家想象中这样写是对的,其实仍然是错的!delete from p1     where idfrom p1 b                   where p1.name=b.name);
看到这里,很多经常写sql但是又不太精通sql的人都会说:纳尼??! 尤其是经常使用Oracle的同学,更是百思不得其解! 我在这里首先说一句: MySQL这样写的确是错的,Oracle这样写应该没问题! 接下来,我们来研究一番,到底如何以这样的方式去重呢?!

安排

(原始数据) 9f4a2af1b6ab238176ae24c32a98b8dc.png

一、预览数据

 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);

(重复值结果)

6669292582983a45510e9401b0192399.png

也就是说,利用上面的SQL语句可以查询到哪些是重复数据。

然而,在它前面加个delete却不能删除重复值!

DELETE FROM t     WHERE t.ID SELECT                       WHERE m.NAME=t.NAME AND m.PRICE = t.PRICE);

(报错截图)

3d03bf049e31dfbf0b9c0939cccf2844.png

三、正确答案

# 正确答案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;
(最终结果) 2d1ae1f2be83bf07a15906b865927405.png 划重点 MySQL不能直接在查询结果中进行删除操作,需要先建立一个临时表。

更多精彩

传送门1:日常答疑|Python向量化操作、矩阵运算传送门2:日常答疑|Python处理时间格式并计算时间差值传送门3:分组排序求前三?TopN问题?一文教你MySQL各类排序操作传送门4:系列|七天PYTHON养成记之初识传送门5:系列|七天PYTHON养成记之函数

f6637da982a61bf379dceccd86c45246.png

看完,读完,要“在看” ↓↓↓

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值