mysql 清除重复数据

全栈 shanhuhai 1593℃

假如有表 dup:

CREATE TABLE `dup` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `username` varchar(255) DEFAULT NULL,
   PRIMARY KEY (`id`)
) ;
INSERT INTO `dup` VALUES ('1', 'nihao'), ('2', 'xxx'), ('3', 'xxx'), ('4', 'nihao'), ('5', 'nihao'), ('6', 'lele'), ('7', 'xx'), ('8', 'lele');

执行以上 sql 创建我们的实验表,其中 username 表是有重复数据的

首先查询哪些数据有重复

select username,count(*) as count from dup group by username having count(username)> 1;

查询一下这些重复数据的id

select distinct( t1.id),t1.username from dup t1,dup t2 where t1.id<>t2.id and t1.username=t2.username;

下面就是去重复部分

这时候其实你可以把上面查到的 id 存到一个文件里,然后用delete语句批量删除,(当然要保留一个,别的 id 都 delete掉)
或者你可以用下面语句,

create temporary table tmp_dup select * from dup group by username having count(username)>=1;
 truncate table dup;
insert into dup select * from tmp_dup;

操作之前记得备份 dup 表。

转载请注明:大后端 » mysql 清除重复数据

喜欢 (1)or分享 (0)