日期:2014-05-16  浏览次数:20488 次

三表查询,,查询选修了全部课程的学生的姓名,求解答。。在线等
这是那三个表
学生表:student                 课程表Course                        选课表             

sno,sname                       cno,cname                           sno,cno
0001,张三                         001,语文                              0001,001
0002,李四                        002,数学                               0001,002
0003,xxxx                          003,英语                              0001,003
                                                                                      0002,001
                                                                                        0002,002

,本来想用group by 查询选课表每个人的count(1) 与  课程表count,判断是否相等,但是这两个表没有外键关联,不一定对。请教更好的方法查询

------解决方案--------------------
如果有重复的话,可以先去重,然后再按照去重后的数量来判断!
------解决方案--------------------
引用:
Quote: 引用:

不过貌似你的逻辑有点问题吧?一个学生选了多少个课,和课程表中的数量有什么关系?

select s.sno,s.sname,count(cno)[选课数量],(select count(1) from course) [总课数]
from student s left join 选课 b on s.sno=b.sno
right join course c on b.cno=c.cno
group by s.sno,s.sname

这样可以不?


所以请教各位。有没有更好的办法。


没看明白是什么意思
------解决方案--------------------
是不是要这样?
--> 测试数据:[student]
if object_id('[student]') is not null drop table [student]
go <