MySQL 重复数据的删除小示例

在平时的学习或者工作中有时我们难免会遇到重复的数据,若想删除某些数据,保留想保留的,那我们该如何去做呢?

下面是一个删除 id 小的,保留 id 大的那条数据的小示例

1、创建我们的测试表

-- 创建测试表
drop table if exists dina_test_table;
create table dina_test_table  (
  `id` int(11),
  `name` char(255),
  `date` date ,
  `year` varchar(10) ,
  `month` varchar(10),
  `salary` decimal(10, 2)
) ;

2、向测试表插入测试数据

insert into dina_test_table values (1, 'Dina', '2020-05-15', '2020', '5', 8000.00);
insert into dina_test_table values (3, 'Augenstern', '2020-05-15', '2020', '5', 8600.00);
insert into dina_test_table values (4, 'Paradox', '2020-05-15', '2020', '5', 8500.00);
insert into dina_test_table values (5, 'Yan', '2020-05-15', '2020', '5', 8000.00);
insert into dina_test_table values (6, 'Dina', '2020-05-15', '2020', '5', 8000.00);
insert into dina_test_table values (7, 'Dina', '2020-05-15', '2020', '5', 8000.00);
INSERT into dina_test_table values (8, 'Augenstern', '2020-05-15', '2020', '5', 8600.00);

3、查看测试表里的数据数据

4、查看 重复数据的 name

select name,count(1) item_cnt from dina_test_table group by name having item_cnt > 1 order by item_cnt desc;

5、所有重复数据的详细信息

select * from dina_test_table
where name in (select name from (select name,count(1) item_cnt from dina_test_table group by name having item_cnt > 1)T1)
order by name;

6、找出重复数据中最大的 id 【我们保留 id 最大的】

 7、删除重复数据【我们保留 id 最大的】

delete from dina_test_table 
where name in (select name from (select name from dina_test_table group by name having count(1) > 1)T1)
and id not in (select max_id from (select max(id) max_id from dina_test_table group by name having count(1) > 1)T2);

8、查看我们删除后的数据:

9、看一下我们的删除前后的数据对比,左图是原始数据,右图是删除后的数据:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值