MySQL Query选择所有只找到两个选项之一的地方

时间:2018-03-13 23:31:30

标签: mysql sql join

我有两张桌子:

Membersmember_idmember_info

Question_AnswersQuestion_idAnswer

如果有两个问题,我需要找出哪个成员只回答了其中一个问题,而不是两个问题。

我曾尝试使用GROUP BY,但没有得到我想要的结果。

最近我得到的是这个查询:

SELECT DISTINCT(qa.question_id), mem.member_id
FROM question_answers qa
LEFT JOIN members mem ON mem.member_id = qa.member_id

这可以获得用户回答的问题的结果,但它包含成员回答这两个问题的结果。

我正在寻找关于如何SELECT仅回答其中一个问题的成员的建议。

编辑:我已经接近了,但想要做得更好。

    SELECT IF( COUNT( DISTINCT( qa.question_id ) ) = 2, 'TWO', 'ONE' ), mem.member_id, MAX( qa.question_id )
FROM question_answers qa
JOIN members mem ON qa.member_id = mem.member_id
WHERE mem.type = 9
GROUP BY mem.member_id  
ORDER BY `mem`.`member_id` ASC

这是一种hacky方式,因为问题ID当前是0和1,但是如果有人建议如何从SELECT IF(返回question_id那么这会有很多帮助。

1 个答案:

答案 0 :(得分:1)

就个人而言,我会有第三张表来保存谁回答了哪些问题的数据。

在我的例子中,我将此表称为Answered

以下是我将如何解决此问题,如果你不想这样做,也许你可以从这个例子中收集一些想法:[DEMO HERE]

SELECT m1.*, qa.*
FROM Members m1
INNER JOIN Answered a ON m1.member_id = a.member_id
INNER JOIN Question_Answers qa ON a.question_id = qa.question_id
WHERE m1.member_id IN (
    SELECT m2.member_id
    FROM Members m2
    INNER JOIN Answered a ON m2.member_id = a.member_id
    INNER JOIN Question_Answers qa ON a.question_id = qa.question_id
    GROUP BY m2.member_id
    HAVING COUNT(m2.member_id) = 1);

enter image description here