假如有表 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 清除重复数据