【问题标题】:Combine test questions & questions attempted tables in MySQL在 MySQL 中结合测试问题和问题尝试表
【发布时间】:2014-05-15 22:54:09
【问题描述】:

我有两张桌子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

无论是否尝试过,我如何才能获得给定测试中所有问题的结果?

【问题讨论】:

    标签: mysql sql join


    【解决方案1】:

    您需要将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,这将导致比较失败。

    【讨论】:

    • 这解决了问题,没想到你可以添加多个连接条件。
    猜你喜欢
    • 2011-06-01
    • 2011-07-05
    • 2020-10-20
    • 2011-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多