我确信有一个适当的词我不记得,但问题很容易描述:我有一个表组成员,这是组和成员之间的简单关系:
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,则它不应该匹配.
从你的短语
我想选择有成员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)
| 归档时间: |
|
| 查看次数: |
4541 次 |
| 最近记录: |