我已经搜索了网络,试图解决这个问题,但没有运气。这也是我在SO上的第一个SQL问题: - )
我只是一个简单的查询简单的人 - 允许我演示
select asy.aim_student_id, ast.aim_test
from aim_student_test ast
join aim_student_absent asa on (asa.aps_yr = ast.aps_yr and asa.aim_test = ast.aim_test and asa.aim_id = ast.aim_id)
--join aim_student_qst asq on (asq.aps_yr = ast.aps_yr and asq.aim_test = ast.aim_test and asq.aim_id = ast.aim_id)
join aim_student_yr asy on (asy.aps_yr = ast.aps_yr and asy.aim_student_yr_id = ast.aim_student_yr_id)
where ast.aps_yr = '2012'
如您所见 - 加入aim_student_qst已被注释掉。
aim_student_qst是一个表格,列出了学生对所有问题的回答。所以一个学生在这个表中会有大约50个案例。为了测试什么减慢了我的查询,我只是注意到了aim_student_qst的加入,果然我的查询加速了。
我认为Oracle正在做的事情 - 哦,你想要那些表,让我们把它们放在一个大表中然后找我们想要的东西。这就是为什么我的查询速度较慢,尽管没有用aim_student_qst做任何其他事情。这是对的吗?
就我的目的而言,我只需要为每个学生选择一个问题,而不是全部50个问题。有没有办法做到这一点?
三江源!!!!!
答案 0 :(得分:1)
也许这样呢?
select asy.aim_student_id, ast.aim_test
from aim_student_test ast
join aim_student_absent asa on (asa.aps_yr = ast.aps_yr and asa.aim_test = ast.aim_test and asa.aim_id = ast.aim_id)
join aim_student_qst asq on (asq.aps_yr = ast.aps_yr and asq.aim_test = ast.aim_test and asq.aim_id = ast.aim_id)
join aim_student_yr asy on (asy.aps_yr = ast.aps_yr and asy.aim_student_yr_id = ast.aim_student_yr_id)
where ast.aps_yr = '2012'
and asq.question_number = 1 -- column name assumed
and asq.question_answer is NULL -- column name and value assumed
;