问题描述
- 求助!!::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试试
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
解决方案二:
你的意思是你认为这个查询应该返回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)的比较好