-1

我有 2 张桌子

表 1 列出了测试前的所有测试问题。

表格1:

testid  qnid    qn
1       1       currency of iran
1       2       highest peak        
1       3       longest bridge

表 2 列出了所有学生的测试响应作为测试后的状态:

表 2:

studentid   testid  qnid    status  

    1       1       1       unanswered      
    1       1       2       unanswered  
    2       1       1       unanswered  
    2       1       2       answered    

给出的表 2 不完整,因为它不包含所有 qnid 的响应。

RESULT 应该是列出所有 testid 的表,qnid 来自表 1 的 test 和 studentid,表 2 中匹配的 testid 的状态,qnid for studentid=2

即结果:

testid  qnid    studentid    status     
1       1       2           unanswered
1       2       2           answered
1       3       

表 2 不包含表 1 中 testid=1 qnid=3 的值,因此其空间应在 RESULT 表中留空。

我使用的查询:

select distinct table1.testid,table1.qnid,table2.status 
from table1 
  left outer join table2 
    on table1.testid = table2.testid 
where (table2.studentid = 2 
or table2.studentid =NULL)

但相反的输出是:

testid  qnid    status
1       1       unanswered
1       1       answered
1       2       unanswered
1       2       answered
1       3       unanswered
1       3       answered
4

3 回答 3

1

只需删除 table2.studentid =NULL 即可。

select distinct table1.testid,table1.qnid,table2.status 
from table1 
  left outer join table2 
    on table1.testid = table2.testid 
where table2.studentid = 2 
于 2013-10-16T01:43:28.793 回答
0
select distinct table1.testid,table1.qnid,coalesce(table2.student_id,NULL),table2.status 
from table1 
  left outer join table2 
    on table1.testid = table2.testid 
where table2.studentid = 2 
于 2014-12-24T21:34:29.193 回答
0

您还需要加入问题 id……所以您的加入看起来像这样:

table1 left outer join table2 on table1.testid = table2.testid AND table1.qnid = table2.qnid
于 2013-10-15T22:17:28.913 回答