mysql 删除重复数据只保留一条

DELETE FROM 表名 WHERE ID IN (
SELECT * FROM
(SELECT MAX(ID) FROM 表名 WHERE ... GROUP BY MSG HAVING COUNT(MSG) > 1)
AS b);

注意事项:MSG为重复字段 ID一定要是 唯一字段 ,如果ID代表的重复字段 那么就删除了所有的数据,BE CARE

上面这句SQL:有一点问题 不知道大家发现没有 这句SQL只会删除重复数据中ID最大的一条 也就是说有3条重复数据的话 就删除最后插入的那一条。

谢谢 网友的评论 让我纠正这些错误。

下面是正确版本:

思想:删除所有重复字段 保留重复字段中最早插入的

[color=red]DELETE FROM TABLE_NAME WHERE MSG IN (
SELECT * FROM
(SELECT MSG FROM TABLE_NAME WHERE FLAG = 3 GROUP BY MSG HAVING COUNT(MSG) > 1)
AS b)
AND ID NOT IN (SELECT * FROM
(SELECT MIN(ID) FROM TABLE_NAME WHERE FLAG = 3 GROUP BY MSG HAVING COUNT(MSG) > 1)
AS c)[/color]

TABLE_NAME:表名
MSG:重复字段
ID:唯一字段
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值