SQL语句
问题: 已知有S(学生表),表结构为sid(学号),sname(姓名)。
有C(课程表),表结构为cid(课程id),cname(课程名)。
有SC(成绩表),表结构为sid(学号),cid(课程id),score(成绩)。
SC表中会有脏数据,比如重复的数据,不存在的学号的成绩。
求选了所有课程的学生。
select s.sid,s.name from S s inner join (
select sid,COUNT(DISTINCT cid,sid) from sc group by sid having count(DISTINCT cid,sid)=
(select count(*) from c)
) tmp on s.sid=tmp.sid;
这里通过inner join来过滤掉学号不存在的脏数据,用 count(distinct cid,sid) 来对重复的课程数据去重。
通过select count(*) from c 来查询课程总数。