我有一個答案表和一個問題表以及連接它們的連接表。 quesions表有問題,答案表有這些問題的答案。問題是,這是一個多選的設置。所以答案會有一些正確的答案和一些問題的錯誤答案。連接表中沒有條目的連接表中的數據
答案是否正確由布爾is_right表示。
如何找到哪些問題有答案不是答案表中的正確答案(以及類似地,答案沒有錯誤的地方)?
我有一個答案表和一個問題表以及連接它們的連接表。 quesions表有問題,答案表有這些問題的答案。問題是,這是一個多選的設置。所以答案會有一些正確的答案和一些問題的錯誤答案。連接表中沒有條目的連接表中的數據
答案是否正確由布爾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
我不知道爲什麼你有一個連接表,因爲答案只能有一個問題。
如果沒有連接表,來查詢在沒有正確答案的問題:
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
這也給你的問題沒有鏈接的答案。 要獲得沒有正確答案的問題,在與答案鏈接的問題中,將第一個LEFT OUTER JOIN更改爲INNER JOIN。
你怎麼說沒有錯誤的答案? – Vikdor