3

次のようなテーブルがあります。

+-----------+----------+
+ person_id + group_id +
+-----------+----------+
+    1      +    10    +
+    1      +    20    +
+    1      +    30    +
+    2      +    10    +
+    2      +    20    +
+    3      +    10    +
+-----------+----------+

グループ 10 および 20 および 30 の person_id のみが返されるようなクエリが必要です (person_id: 1 のみ)。これを行う方法がわかりません。私が見ることができるように、行を person_id でグループ化し、次にすべての group_id を含む行を選択する必要があるからです。

文字列操作などに頼らずにキーの使用を維持するものを探していますgroup_concat()

4

3 に答える 3

5

これはあなたが探しているものです:

select person_id from t
where group_id in (10, 20, 30)
group by person_id
having count(distinct group_id) = 3

効率的ですが、このソリューションを使用すると、 の値の量はin、カウントを比較する値と一致する必要があります。

そして、あなたが言ったように、ただの楽しみの解決策は、あなたでもgroup_concatこれを解決できます:P

select person_id from t
where group_id in (10, 20, 30)
group by person_id
having group_concat(distinct group_id order by group_id) = '10,20,30'
于 2012-04-15T23:17:52.063 に答える
5

ヒットをグループ化してカウントします。

select person_id
  from ATable
 where group_id IN (10, 20, 30)
 group by person_id
having count(*) = 3
于 2012-04-15T23:12:50.163 に答える
-2
SELECT person_id FROM... WHERE group_id IN(10,20,30) group by person_id
having count(*) = 3
于 2012-04-15T23:12:01.210 に答える