2013-01-09 461 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