my_00
my_00
采纳率0%
2015-06-14 12:49

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

  • 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条回答

  • gamefinity 知常曰明 6年前

    你的意思是你认为这个查询应该返回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)的比较好

    点赞 评论 复制链接分享
  • lzp_lrp WorldMobile 6年前

    用以下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

    点赞 评论 复制链接分享

相关推荐