Как запросить таблицу соединений так, чтобы выполнялось несколько критериев?

У меня есть таблица с 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, и он показывает, что в моем запросе есть ошибка. Что я делаю неправильно?

Кроме того, существует ли функция, аналогичная IN, где все критерии должны быть выполнены, чтобы вернуть true?

Ответ 1

Это должно работать:

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

Вам нужно подсчитать количество возвращенных записей, которое равно количеству значений, содержащихся в вашем предложении IN.

SQLFiddle Demo