2012-09-23 67 views
0

我有一個答案表和一個問題表以及連接它們的連接表。 quesions表有問題,答案表有這些問題的答案。問題是,這是一個多選的設置。所以答案會有一些正確的答案和一些問題的錯誤答案。連接表中沒有條目的連接表中的數據

答案是否正確由布爾is_right表示。

如何找到哪些問題有答案不是答案表中的正確答案(以及類似地,答案沒有錯誤的地方)?

+0

你怎麼說沒有錯誤的答案? – Vikdor

回答

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 
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。