`

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条重复数据的话 就删除最后插入的那一条。

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

下面是正确版本:

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

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)


TABLE_NAME:表名
MSG:重复字段
ID:唯一字段
0
1
分享到:
评论
6 楼 感受微风 2016-04-25  
city_moon 写道
ID如果不是数字类型的呢?比如是UUID的呢?

[img]

[/img]

查询是可以比较出大小的
5 楼 city_moon 2016-04-15  
ID如果不是数字类型的呢?比如是UUID的呢?
4 楼 感受微风 2016-01-05  
不是not in ,not in 一定要慎用
3 楼 下雨DE天空 2016-01-05  
确定不是not in?
2 楼 感受微风 2016-01-05  
可以自己试一下
1 楼 qq65827 2016-01-04  
这sql有问题吧

相关推荐

Global site tag (gtag.js) - Google Analytics