结合测试题和问题MySQL中的尝试表

时间:2014-05-15 14:52:19

标签: mysql sql join

我有两张表QUESTIONSQUESTIONS_ATTEMPTED。我正在尝试获取TEST_SESSION_ID的问题列表,然后输出针对尝试的问题给出的响应,以及未尝试的那些的空值。

表的结构如下:

QUESTIONS
    (
        ID
        QUESTION_TEXT
        CORRECT_ANSWER
    )

QUESTIONS_ATTEMPTED
    (
        ID
        QUESTION_ID
        TEST_SESSION_ID
        RESPONSE
    )

我已尝试过此查询,但它只返回尝试的问题,而不是那些未尝试进行该测试的问题(由于WHERE子句):

SELECT      q.ID,
            q.CORRECT_ANSWER,
            qa.RESPONSE
    FROM QUESTIONS q
LEFT JOIN QUESTIONS_ATTEMPTED qa
    ON qa.QUESTION_ID = q.ID
WHERE q.TEST_ID=1 AND qa.TEST_SESSION_ID=235

无论是否尝试,我怎样才能得到给定测试中所有问题的结果?

1 个答案:

答案 0 :(得分:2)

您需要将 second 表中的条件移动到on子句中:

SELECT q.ID, q.CORRECT_ANSWER, qa.RESPONSE
FROM QUESTIONS q LEFT JOIN
     QUESTIONS_ATTEMPTED qa
     ON qa.QUESTION_ID = q.ID and qa.TEST_SESSION_ID = 235
WHERE q.TEST_ID = 1 ;

否则,非匹配行上的值为NULL,这将无法进行比较。