0

我已经在网上搜索试图解决这个问题,但没有运气。这也是我关于 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'

如您所见 - 加入目标学生 qst 已被注释掉。

aim_student_qst 是一个表格,列出了学生对所有问题的回答。所以一个学生在这个表中会有大约 50 个案例。为了测试是什么减慢了我的查询,我只是注释掉了 aim_student_qst 的加入,果然我的查询加速了。

我假设甲骨文正在做的事情是——哦,你想要那些表,让我们把它们放到一张大表中,然后寻找我们想要的。这就是为什么我的查询速度较慢,尽管没有对目标学生 qst 做任何其他事情。它是否正确?

例如,出于我的目的,我只需要为每个学生选择一个问题,而不是全部 50 个问题。有没有办法做到这一点?

谢谢!!!!!

4

1 回答 1

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
;
于 2012-07-12T04:23:35.737 回答