MySQL查询重复数据与去重

在这里插入图片描述

一、创建表,插入一批示例数据

create table student(
	id bigint(20) auto_increment,
	code int(20),
	name varchar(255),
	flag int(2),
	primary key(id)
)engine=innodb;
insert into student values(1,100,"小李",0);
insert into student values(2,100,"小李",0);
insert into student values(3,100,"小李",0);
insert into student values(4,101,"小张",0);
insert into student values(5,102,"小孙",0);
insert into student values(6,102,"小孙",0);
insert into student values(7,103,"小赵",0);
insert into student values(8,104,"小马",0);
insert into student values(9,105,"小飞",0);
insert into student values(10,105,"小飞",0);

二、根据学生编号和姓名查询重复数据

ps:该班级没有姓名相同的学生(拒绝杠精~~)

select name,count(*) name_count from student group by code,name having name_count > 1;

在这里插入图片描述
结果集:查询出所有重复的姓名和数量。

三、过滤重复的数据

方法1、select distinct code,name from student;
方法2、select code,name from student group by code,name;

四、删除重复数据

ps:一般删除重复数据是给数据标志位打标,尽量少用delete。

方法1:将重复数据的标志位打9(废弃), 保留最小ID的数据。

UPDATE student set flag = 9 where `name` in
(select s_name from (select `name` s_name from student group by name having count(1) > 1) temp_1)
and id not in
(select id from (select MIN(ID) id from student group by name having count(1) > 1) temp_2);

在这里插入图片描述

方法2:将不重复的数据插入到新表中

新建表:create table student_temp select * from student group by code,name;
删除表:drop table student;
改表名:alter table student_temp rename to student;

在这里插入图片描述
方法3:直接在原始表中删除重复数据(慎用!!!)

delete from student where id not in(select * from (select id from student group by code,name)a)

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

像豆芽一样优秀

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值