MySQL 查询选择全部,仅找到两个选项之一

标签 mysql sql join

我有两个表:

成员(member_idmember_info)

Question_Answers(Question_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 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 有建议,那么这将会有很大帮助.

最佳答案

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

在我的示例中,我将此表称为“已回答”。

这是我解决这个问题的方法,如果您不想这样做,也许您可​​以从这个示例中收集一些想法:[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

关于MySQL 查询选择全部,仅找到两个选项之一,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49267527/

相关文章:

mysql - 三路连接抓取空行

mysql - 如何从结构成员传递 MySQL 中的 VALUES

mysql - 在 MySQL 数据库中允许非 ascii 字符

sql - 如何将日期时间转换为时间

SQL特殊从表中选择

SQL 加入多个匹配条件

php - 根据日期范围从 MySQL 中提取数据

php - 在 PHP 中处理 JSON 的 Post 数据

mysql - 查询不匹配多个条件

MySQL Results 一个用逗号分隔的列表和来自不同表的值