回答の表、質問の表、およびそれらを結合するための結合表があります。質問表には質問があり、回答表にはそれらの質問に対する回答があります。問題は、これが複数選択のセットアップであることです。したがって、答えには、質問に対する正しい答えと間違った答えがあります。
答えが正しいかどうかはブール値の is_right で示されます。
回答テーブルで、正解がない (および同様に、不正解がない)回答がある質問を見つけるにはどうすればよいですか?
回答の表、質問の表、およびそれらを結合するための結合表があります。質問表には質問があり、回答表にはそれらの質問に対する回答があります。問題は、これが複数選択のセットアップであることです。したがって、答えには、質問に対する正しい答えと間違った答えがあります。
答えが正しいかどうかはブール値の is_right で示されます。
回答テーブルで、正解がない (および同様に、不正解がない)回答がある質問を見つけるにはどうすればよいですか?
SELECT *
FROM questions
WHERE EXISTS (
SELECT TRUE
FROM answers a1
WHERE a1.question_id = questions.question_id
AND a1.is_right
)
AND NOT EXISTS (
SELECT TRUE
FROM answers a2
WHERE a2.question_id = questions.question_id
AND !a2.is_right
)
何らかの理由で副選択を避けたい場合:
SELECT question_id,
SUM(is_right) AS right_answers,
SUM(!is_right) AS wrong_answers
FROM questions
JOIN answers ON answers.question_id = questions.question_id
GROUP BY question_id
HAVING right_answers > 0
AND wrong_answers = 0
答えには質問が1つしかないので、なぜ結合テーブルがあるのかわかりません。
結合テーブルがない場合、正しい答えがない質問をクエリするには、次のようにします。
SELECT questions.*
FROM questions LEFT OUTER JOIN answers
ON questions.id = answer.question_id AND answer.is_right = false
WHERE answer.id IS NULL
Answers_questionsという名前の結合テーブルを使用すると、SQLは次のようになります。
SELECT questions.*
FROM questions
LEFT OUTER JOIN answers_questions
ON answers_questions.question_id = question.id
LEFT OUTER JOIN answers
ON answers_questions.answer_id = answer.id AND answer.is_right = false
WHERE answer.id IS NULL
これにより、回答がリンクされていない質問も表示されます。正解がない質問を取得するには、回答にリンクされている質問の中で、最初のLEFTOUTERJOINをINNERJOINに変更します。