我有一个答案表和一个问题表以及连接它们的连接表。 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