我还在学习MySQL,我正试图将一个问题与它的答案组合在一起(就像你在学校的考试一样)。以下是我通过查询得到的结果:
预期结果是最后4行,其中所有数据都可用。更令人困惑的部分(对我而言)是我的任何一列中的值都不是NULL
所以我不明白为什么它会被返回。
LEFT_JOIN
不是执行此操作的正确方法吗?如果不是,那是什么?非常感谢链接到详细的文档。
这是我当前的查询:
SELECT
Q.question_id,
Q.question,
Q.account_id,
A.answer,
A.correct
FROM quiz_answers A LEFT JOIN quiz_questions Q ON
A.question_id = Q.question_id
AND A.account_id = Q.account_id
AND A.account_id = 48
AND Q.account_id = 48
ORDER BY Q.question_id;
查询仍然返回与条件不匹配的行,但是使用NULL
而不是数据填充结果。查询的预期结果是上面显示的图像中的底部4行。
答案 0 :(得分:1)
由abhik告诉
SELECT
Q.question_id,
Q.question,
Q.account_id,
A.answer,
A.correct FROM quiz_answers A LEFT JOIN quiz_questions Q ON
A.question_id = Q.question_id
where A.account_id = Q.account_id
AND A.account_id = 48 ORDER BY Q.question_id
答案 1 :(得分:0)
您需要使用简单的JOIN而不是LEFT JOIN。
来自https://dev.mysql.com/doc/refman/5.7/en/join.html:
如果LEFT JOIN中ON或USING部分的右表没有匹配的行,则右表使用所有列设置为NULL的行。
答案 2 :(得分:0)
您首先要加入2个表,然后您想要删除(使用where)您不想看到的条目。在这种情况下,最好使用内连接:
SELECT
Q.question_id,
Q.question,
Q.account_id,
A.answer,
A.correct
FROM quiz_answers A INNER JOIN quiz_questions Q ON
A.question_id = Q.question_id
AND A.account_id = Q.account_id
Where
A.account_id = 48
ORDER BY Q.question_id;
答案 3 :(得分:0)
这是左连接的正确行为。它将显示连接中左表中的所有条目,如果右表中没有相应的值,则将添加null。
例如,您可以使用左连接列出数据库中的所有问题,并显示那些有答案的问题。要这样做,你必须写:
FROM quiz_questions LEFT JOIN quiz_answers
如果您只想获得那些有答案的问题的结果,那么
FROM quiz_questions JOIN quiz_answers
将仅显示两个表中的id。
你也应该这样写下你的条件:
FROM quiz_questions A JOIN quiz_answers Q ON
A.question_id = Q.question_id
WHERE Q.account_id = 48
获得理想的结果。