我有两张表QUESTIONS
和QUESTIONS_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
无论是否尝试,我怎样才能得到给定测试中所有问题的结果?
答案 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
,这将无法进行比较。