繁体   English   中英

MySQL查询全选仅找到两个选项之一的地方

[英]MySQL Query select all where only one of two options are found

我有两个表:

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

这是一种骇人听闻的方法,因为问题ID当前在0和1上,但是如果有人对如何从SELECT IF(返回问题ID提出建议,那将大有帮助。

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

在我的示例中,我将此表称为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);

在此处输入图片说明

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM