SQL:选择包含确切给定成员的集合

Rip*_*Doc 8 sql

我确信有一个适当的词我不记得,但问题很容易描述:我有一个表组成员,这是组和成员之间的简单关系:

id | groupid | memberid
1  | g1      | m1
2  | g1      | m2
3  | g2      | m1
4  | g2      | m2
5  | g2      | m3
Run Code Online (Sandbox Code Playgroud)

上面描述了两组,一组是m1和m2,一组是m1,m2和m3.如果我想选择有成员m1,m2但没有其他成员的groupids,我该怎么做?我尝试过的方法也会返回g2,因为m1和m2是它们的子集.

更新:哇,一些很棒的答案!让我首先澄清一下我的问题 - 我希望能够选择与给定成员m1和m2完全匹配的组.因此,如果该组还包含比m1和m2更多的成员,则它不应该匹配,并且如果该组包含少于成员m1和m2,则它不应该匹配.

Joh*_*Woo 9

从你的短语

我想选择有成员m1,m2但没有其他成员的groupids

尝试这个,后面的想法是count与条件和where子句匹配的记录的总实例,并且它等于每个组的记录总数.

SELECT groupid
FROM table1 a
WHERE memberid IN ('m1','m2')
GROUP BY groupid
HAVING COUNT(*) = 
(
  SELECT COUNT(*)
  FROM table1 b
  WHERE b.groupid = a.groupid
  GROUP BY b.groupID
)
Run Code Online (Sandbox Code Playgroud)

SQLFiddle演示