为管理岗位业务培训信息,建立3个表:
S (S#,SN,SD,SA) S#,SN,SD,SA 分别代表学号、学员姓名、所属单位、学员年龄
C (C#,CN ) C#,CN 分别代表课程编号、课程名称
SC ( S#,C#,G ) S#,C#,G 分别代表学号、所选修的课程编号、学习成绩
查询选修全部课程的学员姓名和所属单位
SELECT SN,SD FROM S
WHERE [S#] IN(
SELECT [S#] FROM SC
RIGHT JOIN
C ON SC.[C#]=C.[C#] GROUP BY [S#]
HAVING COUNT(*)=COUNT([S#]))
我自认为是对的
但是结果好像不正确
问题好像出在连接上了
按道理说一个人没有选的课程那条数据应该连接出来是NULL值
这样才能出现COUNT(*) 不等于COUNT(C#)
现在是那条数据没有出来,这样COUNT(*)=COUNT(#)
====================================================
得到学习所有课程的学员:
select sc.s#, count(*) as nofrom sc ,c
where sc.c#=c.c#
group by s#
having count(*) =(select count(*) from c)
|