0

私は次のようなプロファイルを持っています:

profile_id | answer_id
----------------------
1                1
1                4
1               10

次のような構造の投票回答者による回答のリストを含むテーブルがあります。

user_id | answer_id
-------------------
1            1
1            9
2            1
2            4
2           10
3           14
3           29

プロファイル内のすべての回答を提供したユーザーのリストを選択するにはどうすればよいですか?この場合、ユーザー2のみです。

4

4 に答える 4

5

以下を使用できます。

select user_id
from response r
where answer_id in (select distinct answer_id  -- get the list of distinct answer_id
                    from profile
                    where profile_id = 1)  -- add filter if needed
group by user_id  -- group by each user
having count(distinct answer_id) = (select count(distinct answer_id)  -- verify the user has the distinct count
                                    from profile
                                    where profile_id = 1)  -- add filter if needed

デモで SQL Fiddle を参照してください

または、これを書く別の方法は次のとおりです。

select user_id
from response r
where answer_id in (1, 4, 10)
group by user_id
having count(distinct answer_id) = 3

デモで SQL Fiddle を参照してください

于 2013-01-28T22:43:48.607 に答える
0

これは、集計を使用した結合クエリの例です。

select a.user_id
from profile p full outer join
     answers a
     on p.answer_id = p.answer_id and
        p.profile_id = 1
group by a.user_id
having count(p.profileid) = count(*) and
       count(a.user_id) = count(*)

完全外部結合は、すべてのプロファイルをすべての回答に一致させます。2 つのセットが完全に一致する場合、もう一方のセットの ID に「null」はありません。このhaving句は、この条件を確認します。

于 2013-01-28T22:45:06.823 に答える
0
SELECT user_id 
FROM user_answer 
WHERE user_id in (SELECT user_id FROM profile WHERE answer_id = 1) AND
      user_id in (SELECT user_id FROM profile WHERE answer_id = 4) AND
      user_id in (SELECT user_id FROM profile WHERE answer_id = 10)
于 2013-01-28T22:46:28.687 に答える
-1
SELECT *
FROM   table1
       INNER JOIN table2
         ON table1.answer_id = table2.answer_id
WHERE  table2.user_id = 2 

これはあなたが探しているものかもしれないと思います。

于 2013-01-28T22:43:24.253 に答える