我正在开发一个聊天应用程序。
如果组只包含两个具有给定 sql 查询的人,我可以找到组 ID。
我的数据库结构是(用户 ID 和组 ID 是外键(:
Group:
id | name | createdAt
1 foo
2 boo
GroupUser:
userId | groupId | createdAt
1 1
2 1
3 1
select guf.groupId
from GroupUser guf
INNER join GroupUser gu
on guf.groupId = gu.groupId
where guf.userId = 1
and gu.userId != guf.userId
and EXISTS (
select gu.groupId
from GroupUser
where gu.userId = 2
)
目前我找不到至少包含 3 人或更多人的对话组 ID。更具体地说,例如组包含 4 人。根据他们的 ID,我想找到组 ID。就像其中给定 4 个特定人员的组 ID 是什么?它必须返回示例 1(即 groupId(。
如果需要包含三个人的组:
select gu.group_id
from groupusers gu
where gu.user_id in (1, 2, 3)
group by gu.group_id
having count(*) = 3;
如果你只想要三个人,你可以将条件移动到having
子句:
select gu.group_id
from groupusers gu
group by gu.group_id
having sum(gu.user_id in (1, 2, 3)) = 3;
如前所述,这些查询假定groupusers
没有重复的行。 这似乎是一个合理的假设。 如果允许重复,则可以调整逻辑以使用count(distinct)
。