SQL连接基于第三个的2个表

时间:2012-09-26 14:24:52

标签: sql join

我有3张桌子:

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

它看起来像多对多关联,但实际上它只用于1对多(一个问题有多个答案,但每个答案只属于问题)。所以我需要从第一个和第二个表中获取字段(除了id),如下所示:

Question1
      answer1
      answer2
      answer3
Question2
      answer5
      answer4

等等。

5 个答案:

答案 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列。

答案 1 :(得分: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

答案 2 :(得分: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
顺便说一下,“每个答案只属于一个问题”是无关紧要的;表结构允许将答案用于多个问题。事实上它们不仅仅是现存数据的问题。

答案 3 :(得分:0)

以此处提供的其他答案为基础。两个表question_has_answertbl_answer应该是一个表格tbl_answers,其中包含idquestion_idanswer_id)。不需要两个表,您已经可以判断问题是否得到了回答。如果问题没有在表question_has_answer中提供答案,则无法回答。但是现在你可以JOIN其他答案所指出的三个表格。

答案 4 :(得分:-1)

SELECT obj.*,mapping.*,mas.* FROM object_master obj
INNER JOIN mapping_master mapping ON mapping.FMM_Object_ID = obj.FOM_ID
INNER JOIN feedback_master mas ON mapping.FMM_FM_ID = mas.FM_ID