查询两个表中的所有记录

时间:2014-08-25 19:34:37

标签: mysql sql

我正在为学生考试建立一些类型的系统。有两个表 - 一个包含 问题和另一个包含学生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的问题)。我需要表明没有回答的问题。怎么做?

1 个答案:

答案 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