SQL查询:求选修了1号课程和2号课程的学生的姓名及成绩
题目是这样的:
有以下三个表
student表:sno(学号),sname(姓名),sex(性别),dept(系)
course课程表:cno(课程号),课程名(cname)
sc选课表:sno,cno,grade(成绩)
求:选修了1号课程和2号课程的学生的姓名及成绩
我是这样做的(在sql server 2000的查询分析器中调试):
select sname,grade
from sc,student
where sc.cno in(
select cno
from course
where cno='1' or cno='2') and sc.sno=student.sno
group by sname
having count(grade)='2'
提示信息为:
服务器: 消息 8120,级别 16,状态 1,行 1
列 'sc.Grade' 在选择列表中无效,因为该列既不包含在聚合函数中,也不包含在 GROUP BY 子句中。
若我将上述查询语句改为
select sname
from sc,student
where sc.cno in(
select cno
from course
where cno='1' or cno='2') and sc.sno=student.sno
group by sname
having count(grade)='2'
可以正确获得选修了1号和2号课程的学生的姓名。
请问该如何解决这个问题,谢谢先。