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

来源:互联网 发布:linux rpm是什么意思 编辑:程序博客网 时间:2024/04/28 18:05
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:唯一字段

WHERE FLAG = 3:条件可去掉

0 0
原创粉丝点击