11

我有一个有 2 列的表(见下文)。一个成员可以对一个问题有多个回答:

RESPONSES
---------
member_id  INT
response_id  INT
SAMPLE DATA
member_id -- response_id
    1     --     3
    1     --     5
    2     --     1
    2     --     5
    2     --     9
    3     --     1
    3     --     5
    3     --     6

我需要做的是在表中查询满足所有响应条件的成员。例如,我需要选择 response_id 为 1 和 5 的所有成员。我正在使用以下查询:

SELECT DISTINCT member_id 
FROM responses 
WHERE response_id = 1 AND response_id = 5

我希望能取回 member_id 的 2 和 3。但是我什么也没得到。我使用了 EXPLAIN,它显示我的 where 查询中有错误。我究竟做错了什么?

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

4

1 回答 1

10

这应该有效:

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

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

SQLFiddle 演示

于 2012-09-08T03:28:33.657 回答