SQL每日一题05:自连接比较问题

29 阅读1分钟

题目

有一张成绩表T20191106,表结构为SC(StuID,CID,Score),分部对应是学生ID,课程ID和学生成绩,有如下测试数据

查询出'001'课程分数大于'002'课程分数的学生学号 预期结果为

参考答案

create table T20191106
(
StuID int,
CID varchar(20),
Score int
);

insert into T20191106 values (1,'001',67);
insert into T20191106 values (1,'002',89);
insert into T20191106 values (1,'003',94);
insert into T20191106 values (2,'001',95);
insert into T20191106 values (2,'002',88);
insert into T20191106 values (2,'004',78);
insert into T20191106 values (3,'001',94);
insert into T20191106 values (3,'002',77);
insert into T20191106 values (3,'003',90);

--MySQL和SQL Server解法
select a.StuID from
(select StuID,Score 
 from T20191106 where CID='001') a,
(select StuID,Score 
 from T20191106 where CID='002') b
where a.StuID=b.StuID 
and a.Score>b.Score

答案解析

根据题意,我们要分别先求出’001’课程和’002’课程的分数Score;

然后通过学生ID(StuID)来进行关联,并且只需要’001’课程的分数(a.Score)大于’002’课程的分数Score(b.Score)即可。

上述代码使用的是子查询关联来进行求解的,在工作中比较常用。