如何查询连接表以满足多个条件?

Mar*_*k J 11 mysql sql select

我有一个有2列的表(见下文).会员可以对问题进行多次回复:

RESPONSES
---------
member_id  INT
response_id  INT
Run Code Online (Sandbox Code Playgroud)
SAMPLE DATA
member_id -- response_id
    1     --     3
    1     --     5
    2     --     1
    2     --     5
    2     --     9
    3     --     1
    3     --     5
    3     --     6
Run Code Online (Sandbox Code Playgroud)

我需要做的是查询表中符合所有响应条件的成员.例如,我需要选择response_id为1 AND 5的所有成员.我使用以下查询:

SELECT DISTINCT member_id 
FROM responses 
WHERE response_id = 1 AND response_id = 5
Run Code Online (Sandbox Code Playgroud)

我希望能回到member_id的2和3.但是我没有得到任何回报.我使用了EXPLAIN,它显示我的查询位置有错误.我究竟做错了什么?

此外,是否存在类似于IN的函数,其中必须满足所有条件才能返回true?

Joh*_*Woo 10

这应该工作:

SELECT member_ID
FROM responses
WHERE response_ID IN (1,5)
GROUP BY member_ID
HAVING COUNT(DISTINCT response_id) = 2
Run Code Online (Sandbox Code Playgroud)

您需要计算返回的记录数,它等于IN子句中提供的值的数量.

SQLFiddle演示

  • `HAVING COUNT(DISTINCT response_id)= 2`捕获成员已经两次回答相同值的情况. (2认同)