2013-01-09 224 views
1

数据库表结构:经与查询连接表的麻烦

会话表(又名考试表)

SessionId(auto) SessionName 
137    XULWQ 

问表:

SessionId QuestionId QuestionContent QuestionNo QuestionMarks OptionId 
137  1   Name 2 Things  1   5    5 
137  2   Name 3 Things  2   5    2 

Option_Table表:

OptionId OptionType 
1   A-C 
2   A-D 
3   A-E 
4   A-F 
5   A-G 
6   A-H 

回答表:

AnswerId(auto) SessionId QuestionId Answer 
    200   137  1   B 
    201   137  1   F 
    202   137  2   D 
    203   137  2   A 
    204   137  2   C 

我无法编译下面的查询。我想在查询中选择下面的字段,但是我遇到的问题是我的联接。如果您查看最后一次加入,我试图从Option_Table表中检索OptionID,但我必须通过Answer表,该表没有该字段。我的问题是,我有3个字段实际上依靠加入问题表。

我的问题是加入下面的表的正确方式是什么,以便它显示每个问题的答案与我想要选择的字段?

SELECT q.SessionId, s.SessionName, q.QuestionId, q.QuestionNo, q.QuestionContent, an.Answer, an.AnswerId, q.QuestionMarks, q.OptionId, o.OptionType 
     FROM Session s 
     INNER JOIN Question q ON s.SessionId = q.SessionId 
     JOIN Answer an ON q.QuestionId = an.QuestionId 
     JOIN Option_Table o ON an.OptionId = o.OptionId 
     WHERE s.SessionName = ? 
     ORDER BY q.QuestionId, an.Answer 

输出要求:

enter image description here

+0

你想要的输出是什么? –

+0

我在屏幕截图中包含了查询所需的输出。很抱歉,可能难以看到 – user1881090

+0

@ user1881090确定,但是,您是否尝试了一些答案? – Lamak

回答

3
SELECT * FROM 
Question q INNER JOIN Answer a ON q.QuestionID = a.QuestionID 
INNER JOIN Option_Table ot ON ot.optionID = q.optionID 
INNER JOIN session s ON s.sessionid = q.sessionid 
4

只是改变JOIN条件从表Question使用列:

SELECT q.SessionId, s.SessionName, q.QuestionId, q.QuestionNo, 
     q.QuestionContent, an.Answer, an.AnswerId, q.QuestionMarks, 
     q.OptionId, o.OptionType 
FROM `Session` s 
INNER JOIN `Question` q 
    ON s.SessionId = q.SessionId 
INNER JOIN `Answer` an 
    ON q.QuestionId = an.QuestionId 
INNER JOIN `Option` o 
    ON q.OptionId = o.OptionId 
WHERE s.SessionName = ? 
ORDER BY q.QuestionId, an.Answer 
+0

我已经试过了,但是我得到了一个从最后一个内部连接引用到order by子句的语法错误。当连接是“答案”表时,我还可以引用q.QuestionId吗? – user1881090

+0

@ user1881090从我最后一次内部连接到order by clause?的错误,我不认为我明白你的意思。你能发布错误消息吗?仅仅因为'JOIN'在与表'Answer'连接之后,并不意味着该连接与该表相关 – Lamak

+0

@Lamak您可能需要在'option'附近反引号,它是一个保留字。 – Taryn

1
SELECT 
    s.SessionId , 
    s.SessionName, 
    q.QuestionId, 
    q.QuestionNo, 
    q.QuestionContent, 
    a.Answer, 
    a.AnswerId, 
    q.QuestionMarks, 
    ot.OptionId, 
    ot.OptionType 
FROM Session as s 
LEFT JOIN Question as q ON s.SessionId = q.SessionId 
LEFT JOIN Option_Table as ot ON ot.OptionId = q.OptionId 
LEFT JOIN Answer as a ON a.QuestionId = q.QuestionId  
+0

Option_Table中没有SessionId – user1881090

+0

@ user1881090看看这可能会解决你的问题问题我已编辑 –

+0

upvote for answer。我已经接受了别人的回答,因为我测试的三分之一是先工作的 – user1881090