MySql去重

需求:根据单列去重

在数据库中存在重复的多条数据,需要删除多余的数据,只保留其中一条,以下是表结构
在这里插入图片描述
先查询重复数据

select * from xiciip group by ip having count(ip) >1;

结果如下:
在这里插入图片描述

添加主键

如果在原始数据没有自动增长的主键,则添加一个主键id

set @a:=0;
update xiciip set id=(@a:=@a:+1);  #xiciip 为表名

保留id最小的那一条数据

直接删除选择的结果会报错,意思是不能在一条语句中对同一个表即进行select,又进行delete操作在这里插入图片描述

建临时表

把查询出来的结果放到临时表tmp1 tmp2中进行封装,再删除,代码如下:

DELETE 
FROM xiciip 
WHERE ip IN
(SELECT ip FROM
  (SELECT ip FROM xiciip 
  GROUP BY ip 
  HAVING COUNT(ip)>1)  tmp1)
AND id NOT IN
(SELECT * FROM
   (SELECT MIN(id) FROM xiciip
   GROUP BY ip
   HAVING COUNT(ip) > 1)  tmp2);

运行结果如下:
在这里插入图片描述
在查询原表xiciip,查询不到重复的数据,去重成功。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值