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 クエリにエラーがあることがわかりました。私は何を間違っていますか?

また、true を返すためにすべての基準を満たす必要がある IN に似た関数はありますか?

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 に答える