我需要一些代码方面的帮助
我有一个名为“stuff”的数据库表,我有以下信息:

+------+-------------+---------------------+
| id   | member_id   |     group_id        |
+------+-------------+---------------------+
| 1    |      11     |         aa          |
+------+-------------+---------------------+
| 2    |      22     |         aa          |
+------+-------------+---------------------+
| 3    |      33     |         aa          |
+------+-------------+---------------------+
| 4    |      44     |         bb          |
+------+-------------+---------------------+
| 5    |      55     |         bb          |
+------+-------------+---------------------+
| 6    |      66     |         bb          |
+------+-------------+---------------------+

如果我从一个组中搜索所有3个成员,我需要找到组id
类似于:
SELECT group_id
FROM stuff
WHERE member_id=11 and member_id=22 and member_id=33

我知道这个问题是无效的,但我不知道如何使它有效。
非常感谢你。

最佳答案

这个问题叫做Relational Division

SELECT  group_id
FROM    stuff
WHERE   member_id IN (11,22,33)
GROUP   BY group_id
HAVING  COUNT(*) = 3

SQLFiddle Demo
如果member_id不是每个group_id的唯一值,则需要有DISTINCT才能仅计算唯一值。
SELECT  group_id
FROM    stuff
WHERE   member_id IN (11,22,33)
GROUP   BY group_id
HAVING  COUNT(DISTINCT member_id) = 3

此链接上的更多变体:
SQL of Relational Division

10-08 01:22