2 my 00 my_00 于 2015.06.14 20:49 提问

求助!!::SQL语句查询求改正!!

我有一个SQL Server表,表明为:EvaluateTeacherGrade
运行效果如下图:
图片说明
图片说明
问题1:我想查询得到所有courseID=200002和teacherID=22222001的相关数据表。我用如下SQL语句查询获得的表count应该等于108才对,但是为什么等??
SQL语句如下所示:

 select C.courseID,C.courseName,C.teacherID,C.teacherName,Count(e.Grade) As count 
from EvaluateTeacherGrade e,Course C,Grade G 
where e.courseID=G.courseID and e.courseID=C.courseID and e.courseID='200002'and  e.teacherID='22222001' 
GROUP BY C.COURSEID,C.COURSENAME,C.TEACHERID,C.TEACHERNAME

效果图如下所示:
图片说明
我该如何改正SQL语句啊??
问题2:我想查询得到所有courseID=200002和studentID=0711001的相关数据表。我用如下SQL语句查询获得的表count应该等于54才对,但是为什么等于45呢??
SQL语句如下所示:

select C.courseID,C.courseName,C.teacherID,C.teacherName,Count(e.Grade) As count ,e.studentID ,s.studentName 
from EvaluateTeacherGrade e,Course C,Grade G,student s 
where e.courseID=G.courseID and C.courseID=G.courseID and e.studentID =s.studentID 
 and e.courseID='200002'and e.studentID='0711001' 
GROUP BY C.COURSEID,C.COURSENAME,C.TEACHERID,C.TEACHERNAME ,e.studentID ,s.studentName

查询得到的效果图如下所示:
图片说明
我该如何改正SQL语句呢??

2个回答

lzp_lrp
lzp_lrp   Ds   Rxr 2015.06.14 21:51

用以下sql试试
select C.courseID,C.courseName,C.teacherID,C.teacherName,Count(e.Grade) As count
from EvaluateTeacherGrade e,Course C,Grade G
where e.courseID*=G.courseID and e.courseID*=C.courseID and e.courseID='200002'and e.teacherID='22222001'
GROUP BY C.COURSEID,C.COURSENAME,C.TEACHERID,C.TEACHERNAME

select C.courseID,C.courseName,C.teacherID,C.teacherName,Count(e.Grade) As count ,e.studentID ,s.studentName
from EvaluateTeacherGrade e,Course C,Grade G,student s
where e.courseID*=G.courseID and C.courseID*=G.courseID and e.studentID =s.studentID
and e.courseID='200002'and e.studentID='0711001'
GROUP BY C.COURSEID,C.COURSENAME,C.TEACHERID,C.TEACHERNAME ,e.studentID ,s.studentName

my_00
my_00 但是第一个还是和原来一样
2 年多之前 回复
my_00
my_00 谢谢
2 年多之前 回复
gamefinity
gamefinity   Rxr 2015.06.15 05:39

你的意思是你认为这个查询应该返回108,但是实际返回了90?
虽然我不知道你的108这个数字是哪里来的,但是即使108是正确的,这个不一定是SQL的错,可能是你的数据有问题。
你可以试一下这个SQL语句

select C.courseID,C.courseName,C.teacherID,C.teacherName,Count(e.Grade) As count 
from EvaluateTeacherGrade e,Course C
where e.courseID=C.courseID and e.courseID='200002'and  e.teacherID='22222001' 
GROUP BY C.COURSEID,C.COURSENAME,C.TEACHERID,C.TEACHERNAME

如果这个SQL语句返回的是108的话,说明你的Grade标没有完全覆盖EvaluateTeacherGrade表的CourseId。因此一做关联就筛选掉了一部分数据。
同时,你的查询中并没有用到Grade表的任何数据。
第二个查询和第一个本质上你没有区别,找到问题了之后应该一样处理。
另外一种可能是:你的courseId或者teacherId里面有空格。这样Id,最好还是用数值型(int/bigint)的比较好

Csdn user default icon
上传中...
上传图片
插入图片