查看: 1900|回复: 0
打印 上一主题 下一主题
收起左侧

[数据库部分] 193、删除除了id号不同,其他都相同的学生冗余信息

[复制链接]

566

主题

713

帖子

3827

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
3827
楼主
跳转到指定楼层
发表于 2016-9-9 08:26:46 来自手机 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
193、删除除了id号不同,其他都相同的学生冗余信息


2.学生表 如下:
id号   学号   姓名 课程编号课程名称 分数
1        2005001  张三  0001      数学    69
2        2005002  李四  0001      数学    89
3        2005001  张三  0001      数学    69
A: delete from tablename where id号 not in(select min(id号) from tablename group by 学号,姓名,课程编号,课程名称,分数)
实验:
create table student2(id int auto_increment primary key,code varchar(20),name varchar(20));
insert into student2 values(null,'2005001','张三'),(null,'2005002','李四'),(null,'2005001','张三');

//如下语句,mysql报告错误,可能删除依赖后面统计语句,而删除又导致统计语句结果不一致。

delete from student2 where id not in(select min(id) from student2 group by name);
//但是,如下语句没有问题:
select *  from student2 where id not in(select min(id) from student2 group by name);
//于是,我想先把分组的结果做成虚表,然后从虚表中选出结果,最后再将结果作为删除的条件数据。
delete from student2 where id not in(select mid from (select min(id) mid
from student2 group by name) as t);
或者:
delete from student2 where id not in(select min(id) from (select * from s
tudent2) as t group by t.name);
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 打开微信扫一扫