我正在为学生考试建立一些类型的系统。有两个表 - 一个包含 问题和另一个包含学生ID及其答案的问题。
表格问题
+-------------+------------+
| IdQuestion | QuestionTXT|
+-------------+------------+
| 1 | Q1? |
+-------------+------------+
| 2 | Q2? |
+-------------+------------+
| 3 | Q3? |
+-------------+------------+
| 4 | Q4? |
+-------------+------------+
Table Answers:
+-------------+------------+------------+
| StudentID | IdQuestion | Answer |
+-------------+------------+------------+
| A | 1 | Y |
+-------------+------------+------------+
| A | 2 | N |
+-------------+------------+------------+
| A | 3 | Y |
+-------------+------------+------------+
现在我必须得到学生回答的内容以及哪些问题没有得到解答。
这是一个查询,提取学生回答的问题:
SELECT `answ`.`StudentID`
`questions`.`IdQuestion`, `questions`.`QuestionText`, `answ`.`Odgovor`
FROM `questions`
LEFT JOIN `answ` ON `answ`.`IdQuestion` = `questions`.`IdQuestions`
WHERE `answ`.`StudentID` = 'A'
但是此查询仅列出了有答案的问题(缺少id 4的问题)。我需要表明没有回答的问题。怎么做?
答案 0 :(得分:1)
如果您想要回答但未回答的问题,请将条款
中的where条件移至SELECT
`a`.`StudentID`,
`q`.`IdQuestion`,
`q`.`QuestionTXT`,
`a`.`Answer`
FROM `questions` q
LEFT JOIN `answ` a
ON `a`.`IdQuestion` = `q`.`IdQuestion`
AND `a`.`StudentID` = 'A'
Where子句过滤掉join产生的结果集中的记录,所以在on子句中使用你的条件只会过滤你加入的表中的记录,不会过滤整个结果集,所以问题没有。 4尚未回答,但它将在最终结果集中返回但从答案表中返回空行
See Demo