SQL题:
使用一个SQL删除除了自动编号不同, 其他都相同的学生冗余信息
自动编号 学号 姓名 课程编号 课程名称 分数
1 2018001 张三 1 数学 69
2 2018002 李四 1 数学 89
3 2018001 张三 1 数学 69
4 2018002 李四 2 语文 79
5 2018001 张三 2 语文 80
6 2018002 李四 2 语文 79
解答:
数据库版本:Oracle 11g
--创建表
create table tb_student_score(id int,sid int,name varchar2(20),kid int,kname varchar2(20),score int);
--插入数据
insert into tb_student_score values(1,2018001,'张三',0001,'数学',69);
insert into tb_student_score values(2,2018002,'李四',0001,'数学',89);
insert into tb_student_score values(3,2018001,'张三',0001,'数学',69);
insert into tb_student_score values(4,2018002,'李四',0002,'语文',79);
insert into tb_student_score values(5,2018001,'张三',0002,'语文',80);
insert into tb_student_score values(6,2018002,'李四',0002,'语文',79);
commit;
--查询数据
select * from tb_student_score;
ID SID NAME KID KNAME SCORE
1 2018001 张三 1 数学 69
2 2018002 李四 1 数学 89
3 2018001 张三 1 数学 69
4 2018002 李四 2 语文 79
5 2018001 张三 2 语文 80
6 2018002 李四 2 语文 79
思路:对除了自动编号外的字段进行分组即可筛选出不重复的数据
--执行删除SQL语句
delete from tb_student_score
where id not in (
select min(id)
from tb_student_score t
group by t.sid, t.name, t.kid, t.kname, t.score
);
commit;
--查询数据
select * from tb_student_score;
ID SID NAME KID KNAME SCORE
1 2018001 张三 1 数学 69
2 2018002 李四 1 数学 89
4 2018002 李四 2 语文 79
5 2018001 张三 2 语文 80