重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
工作中,我们经常有需要删除一些重复数据的这种需求。重复数据可能是程序bug造成的
公司主营业务:网站设计制作、网站制作、移动网站开发等业务。帮助企业客户真正实现互联网宣传,提高企业的竞争能力。创新互联是一支青春激扬、勤奋敬业、活力青春激扬、勤奋敬业、活力澎湃、和谐高效的团队。公司秉承以“开放、自由、严谨、自律”为核心的企业文化,感谢他们对我们的高要求,感谢他们从不同领域给我们带来的挑战,让我们激情的团队有机会用头脑与智慧不断的给客户带来惊喜。创新互联推出荥阳免费做网站回馈大家。
好,让我们看看如何删除这些重复数据
删除重复数据的思路呢,是这样的,查看根据这个重复字段分组后的结果有没有大于1的情况
如果有大于的1的情况呢,那就说明是有重复数据的!
1) 创建数据库
create database ceshi;
2) 创建表
CREATE TABLE t1 (
id int(10) unsigned NOT NULL AUTO_INCREMENT,
name varchar(20) not null,
createdAt timestamp NOT NULL DEFAULT current_timestamp(),
updatedAt timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
PRIMARY KEY (id)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4;
3) 插入数据insert into t1 values(null,'haha',now(),now()),(null,'haha',now(),now()),(null,'xixi',now(),now()),(null,'heihei',now(),now()),(null,'hoho',now(),now()),(null,'hoho',now(),now()),(null,'sasa',now(),now()),(null,'haha',now(),now()),(null,'sasa',now(),now()),(null,'xixi',now(),now());
4) 查看数据select * from t1;
5) 根据最小id,重复字段name分组,假设我们的需求就是最后要保留第最小id的这些数据,把其它重复的删除
select min(id),name from t1 group by name having count(name)>1 order by id;
6) 使用别名关联一下,这些数据就是重复的,最后要删除的
select a.*
from t1 a,(select *,min(id) from t1 group by name having count(name)>1)as b where a.name=b.name and a.id>b.id;
7) 记得先备份一下数据
create table bak_t1_20190621 like t1;
insert into bak_t1_20190621 select * from t1;
8) 删除数据
delete a from t1 a,(select *
,min(id) from t1 group by name having count(name)>1)as b where a.name=b.name and a.id>b.id;
9) 最后检查一下,确实已经没有重复数据了