2017-06-29 14 views
0

在QuizQuestions表中獲取特定測驗的所有問題。即使連接的表包含空值,也可以列出表中所有需要的記錄

從ClassStudents表中獲取特定班級中的所有學生。

從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 

它得到的數據,但如果學生沒有回答某個問題或所採取的測驗,我只是得到他們的lastName但空值的questionStem。

但我想查看他們沒有回答的問題的questionStem。

看着我的查詢,我可以看到爲什麼我得到一個NULL。這是因爲如果學生從未回答問題,那麼StudentAnswers表中沒有條目。

有沒有辦法重新編寫查詢,以便每個問題都顯示出來,即使學生從未回答過它?

我想要得到這樣的結果:

lastName   questionStem   Answer 
-------------------------------------------------------- 
Smith    Favorite color?   Black 
Jones    Favorite color?   Did not answer 
Aki     Favorite color?   Red 
Smith    Your age?    22 
Jones    Your age?    71 
Aki     Your age?    Did not answer 
+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

相關問題