0

回答の表、質問の表、およびそれらを結合するための結合表があります。質問表には質問があり、回答表にはそれらの質問に対する回答があります。問題は、これが複数選択のセットアップであることです。したがって、答えには、質問に対する正しい答えと間違った答えがあります。

答えが正しいかどうかはブール値の is_right で示されます。

回答テーブルで、正解がない (および同様に、不正解がない)回答がある質問を見つけるにはどうすればよいですか?

4

2 に答える 2

1
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
于 2012-09-23T12:58:52.697 に答える
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に変更します。

于 2012-09-23T14:37:37.290 に答える