Mysql 整理重复数据

表结构:

school_idschool_nametotal_studenttest_takers
1239河南大学8050
1240河南大学6065
1241武汉工业大学10258
1242四川农业大学9885
1243浙江理工大学6670
1244浙江理工大学8559

注⚠️:新建表格 字段无需上引号 插入语句 字段如果是字符类型记得上引号

新建表:

create table test(school_id int,school_name varchar(255),total_student int,test_takers int);

插入数据:

insert into test(school_id,school_name,total_student,test_takers) values(1239,“河南大学”,80,50),(1240,“河南大学”,60,65),(1241,“武汉工业大学”,102,58),(1242,“四川农业大学”,98,85),(1243,“浙江理工大学”,66,70),(1244,“浙江理工大学”,85,59);

在这里插入图片描述

删除所有重复数据:

delete from test where school_name in (select a.school_name from (select school_name from test group by school_name having count(*)>1) a);

查询重复项中最大的id:

select max(school_id) from test group by school_name having count(*)>1;

删除重复数据中id最大的数据:

delete from test where school_id in (select * from (select max(school_id) from test group by school_name having count(*)>1) as ori);

*使用ori(可指定任意名称) 承接查询出的数据作为中间表 否则会查询出错 *

删除除了最大id外的重复数据:

delete from test where school_id not in (select * from (select max(school_id) from test group by school_name having count(*)>1) as ori);

=======================================

出现的错误

1. only_full_group_by :

group by 中必须包含 要查询的字段
在这里插入图片描述

2. you can’t specify target table ‘tablename’ for update in from clause

mysql 不能对同一个表同时进行 update(delete) 和 select 联合操作
如果非得要操作 那只能 把 条件中 再关联一次(不能的缘由是因为 条件中的查询是 在 临时表中查的,保存却是原表,解决方法就是将查询和保存都放在临时就可以了)

将SELECT出的结果再通过中间表SELECT一遍,这样就规避了错误。在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值