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
,查询不到重复的数据,去重成功。