2012-09-26 116 views
0

2代表我有3個表:SQL加入基於第三

tbl_question (id,question) 
tbl_answer (id,answer) 
question_has_answer (id,question_id,answer_id) 

它看起來像許多-to-many關聯,但實際上它只是用來像1對多(一個問題有多個答案,但每個答案只屬於問題)。所以,我需要從第一和第二表中獲取的字段(除ID)是這樣的:

Question1 
     answer1 
     answer2 
     answer3 
Question2 
     answer5 
     answer4 

等。

+1

我會編輯它,因爲它的confusiong(相同的表名和列名)...你使用的是哪個SQL btw? –

+0

即時通訊使用MySQL –

+0

好的,然後發佈的查詢都是正確的。 –

回答

2

是:

SELECT question, answer 
    FROM tbl_question q 
    INNER JOIN question_has_answer qha 
    ON q.id = qha.question_id 
    INNER JOIN tbl_answer a 
    ON qha.answer_id = a.id 
ORDER BY question,answer 

我也不會推薦使用ID爲表question_has_answer,如果你不打算使用該ID。

還有更多:如果1個答案僅與1個問題相關聯,則不應使用question_has_answer並修改tbl_answer以添加questionID列。

0

試試這個。

SELECT b.question, c.answer 
FROM question_has_answer a 
     INNER JOIN tbl_question b 
      ON a.question_ID = b.ID 
     INNER JOIN tbl_answer c 
      ON a.answer_ID = c.id 
ORDER BY a.question_ID, a.answer_ID 
0
select question, answer 
from tbl_question q 
join question_has_answer qa on qa.question_id = q.id 
join tbl_answer a on a.id = qa.answer_id 
order by 1,2 

順便說一句,這是無關緊要的,「每答案只能屬於一個問題」;表結構允許答案用於多個問題。事實並非只是現存數據的問題。

0

建立在這裏介紹的其他答案。兩個表question_has_answertbl_answer應該是一個表,如tbl_answersid,question_id,answer_id)。沒有必要使用兩張表格,你已經可以判斷一個問題是否被回答。如果問題沒有在表question_has_answer中提供的答案,則不回答。但現在你可以通過其他答案指出的三個表。