クイズのすべての質問に関する情報を選択するためのクエリを作成しています(ModuleId
)。質問、回答キー、およびグレーダー情報があれば、最新のユーザー回答が必要です。ジョイン・テーブルに行がない場合に行が選択されない
CREATE PROCEDURE spGetQuestionsAnswersMostRecentUserAnswersAndRevisions
(@UserId char(7), @ModuleId int)
AS
SELECT
ua.QuestionId, ua.UserAnswerId, UserAnswer, Question, Answer,
TypeId, GraderRevision, IsAnswerCorrect
FROM
UserAnswersByModule ua
INNER JOIN
QuestionsAnswersByModule qa ON qa.QuestionId = ua.QuestionId
INNER JOIN
GradedAnswersByQuestion ga ON ga.UserAnswerId = ua.UserAnswerId
WHERE
ua.UserAnswerId IN (SELECT MAX(UserAnswerId) AS MostRecentUserAnswer
FROM UserAnswersByModule
WHERE ModuleId = @ModuleId
AND UserId = @UserId
AND IsActive = 1
GROUP BY QuestionId)
AND ga.RevisionId IN (SELECT MAX(RevisionId) AS MostRecentRevisionId
FROM GradedAnswersByQuestion GA
INNER JOIN UserAnswersByModule ON ga.UserAnswerId = ua.UserAnswerId
WHERE UserId = @UserId
AND ModuleId = @ModuleId
GROUP BY GA.UserAnswerId)
これはテーブルが設定されている方法です。
QuestionAnswersByModule:
PK - QuestionId
UserAnswersByModule:
PK - UserAnswerId
FK - QuestionAnswersByModule.QuestionId
GradedAnswersByQuestion:
PK - RevisionId
FK - UserAnswersByModule.UserAnswerId
私のクエリでの問題は、特定のUserAnswerId
ためGradedAnswersByQuestion
で何かがない場合、クエリはこれらの2列の残りのすべてでは何も、代わりにnullを返しません、ということです情報。私はかなりそれがAND ga.RevisionId IN ...
のためだと確信していますが、私はそれを書く方法を考えることはできません。どんな助けもありがとう。
あなたの提案をありがとう、私はあなたのバージョンを試して、私はまだ同じ結果を得ています。格付けテーブルで空の行を含むクエリを実行すると、何も返されません。私は左の結合を試みたが、それ以上は得ることができなかったことに注意したい。 編集 - 実際に私が行った変更の1つを見逃しましたが、もう一度試してみましょう。 – kjstan
私はお詫び申し上げます、あなたの提案が働いた!ありがとうございました! – kjstan
グレート私は別のバージョンを提供するつもりだったが、私はそれが必要ではないと思う! – shawnt00