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 但是第一个还是和原来一样
大约 3 年之前 回复
my_00
my_00 谢谢
大约 3 年之前 回复
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
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
sql语句中用select语句查询值大于平均值的情况
现在,我们希望找到 OrderPrice 值高于 OrderPrice 平均值的客户。 我们使用如下 SQL 语句: SELECT Customer FROM Orders WHERE OrderPrice>(SELECT AVG(OrderPrice) FROM Orders) 结果集类似这样: Customer Bush Cart
关于sql 语句求平均值和总和
已知有两张表 部门表department:部门编号 dept_id 、部门名称 dept_name 员工表employee:员工编号 emp_id、员工姓名 emp_name、 部门编号 dept_id 、工资emp_wage 1)求各部门的平均工资 select d.dept_name ,round(avg(nvl(e.emp_wage,0)),2) sal from employee
sql语句查询各门课程平均分的最大值
sql查询。order by等用法
一条SQL语句求全年平均值
一年有8760个小时!(才这么点。。。)
sql语句 中间表求并集
数据库结构: user_name product_id 1 A 2 B 1 B 3 C 4 C 1 C 需求:哪些用户同时购买了 A,C,D?(或者说,同时购买A,C,D的用户都是那些?) A,C,D是用户临时输入的,每次都确定、但不固定。 SELECT user_name FROM product_buy WHERE product_id in( 13
SQL查询:并集、差集、交集
  新建两个表进行测试: test_a ID name 1 曹操 2 郭嘉 3 孙权 4 周瑜 test_b ID name 1 刘备 2 关羽 3 张飞 4 孙权 5 周瑜 1.UNION形成并集   UNION可以对两个或多个结...
SQL语句计算男女各占总人数比例
select   count(*) as 人口总数, sum(case when sex=0 then 1 else 0 end) 男人数, sum(case when sex=0 then 1 else 0 end)*1.0/count(*)男所占比例, sum(case when sex=1 then 1 else 0 end) 女人数, sum(case whe
SQL的老题目:查询学生平均成绩及其名次
SQL的老题目了。Student(S#,Sname,Sage,Ssex) 学生表 Course(C#,Cname,T#) 课程表 SC(S#,C#,score) 成绩表 Teacher(T#,Tname) 教师表24、查询学生平均成绩及其名次答:SELECT 1+(SELECT COUNT( distinct 平均成绩)               FROM (SELECT S#,
sql 查询科目成绩以及平均成绩
score表 stuid subject score 1 math 80 1 english 90 2 math 81 2 english 91 3 math 85 3 english 95要求得到的组合查询结果 id math english sum 1 80 90 170 2 81 91 172
sql统计查询——求不同类别的平均值
需求:分值表,均是学生给老师的打分,每个老师的记录数目未知,统计各老师的平均分值。 这是我最近做项目时遇到的一个问题,那么如何统计呢? 简化下需求:    分别求出上图ID为1、2、3的分数平均值。 你想到怎么做了吗? 其实非常简单,通过GROUP BY 就可以实现   SELECT ID,AVG(Score) AS avgScore FROM [TEST].[d