即使连接表包含NULL,也要列出表中所有所需的记录

时间:2017-06-29 18:23:59

标签: sql-server sql-server-2012

在QuizQuestions表中获取特定测验的所有问题。

从ClassStudents表中获取特定班级的所有学生。

从StudentAnswers表中获取特定测验的指定班级的所有学生答案。仅存储学生在测验中回答的问题记录。

所以我写了这个:

.woocommerce-review-link

它确实获取了数据,但如果学生没有回答特定问题或参加测验,我只会得到他们的lastName但是为questionStem为NULL。

但我希望看到问题是他们没有回答的问题。

查看我的查询,我可以看到为什么我得到一个NULL。这是因为如果学生从未回答过问题,那么StudentAnswers表中没有条目。

有没有办法重新编写查询,以便显示每个问题,即使学生从未回答过问题?

我试图得到这样的结果:

SELECT cs.lastName,  qq.questionStem, ISNULL(sa.selectedAnswer, 'Did not answer') AS Answer
FROM StudentAnswers sa
right join QuizQuestions qq ON qq.questionId = sa.questionId
right join ClassStudents cs ON sa.studentID = cs.studentID
WHERE qq.quizID = 12345
AND cs.classID = 500
ORDER BY lastName

1 个答案:

答案 0 :(得分:2)

试试这个

SELECT cs.lastName,  qq.questionStem, ISNULL(sa.selectedAnswer, 'Did not answer') AS Answer
FROM StudentAnswers sa
FULL JOIN QuizQuestions qq ON qq.questionId = sa.questionId
FULL JOIN ClassStudents cs ON cs.studentID = sa.studentID  
WHERE qq.quizID = 12345
AND cs.classID = 500
ORDER BY lastName

参考:SQL Server FULL Joins