我必须得到五个不同组的成员,这些组应该有5个成员
Member
(idMember,nameMember)Group
(idGroup)Belongs
(idMember,idGroup)小组有成员,小组成员,成员可以在他想要的任意数量的小组中,但成员不能在同一小组中两次
我做了类似
的事情select idMember, nameMember
from Member m, Group g
where idMember in (select b.idMember
from Belongs b)
group by idMember, nameMember
having (select count(*)
from Belongs b
where b.idMember = m.idMember)>5
and
(select count (*)
from Belongs b
where b.idGroup = g.idGroup /*??*/)>5
并且我不知道如何将属于群组
答案 0 :(得分:4)
逐步解决此类问题。以下内容包含五个组中的成员:
select b.idMember
from belongs b -- Note: `group` is a reserved word so a bad name for a table
group by b.idMember
having count(*) = 5;
以下内容包含五个成员的小组:
select b.idGroup
from belongs b
group by b.idGroup
having count(*) = 5;
(有趣的对称性。)
如果要将第一个查询限制为第二个查询中的组,则一种简单的方法是使用in
:
select b.idMember
from belongs b
where b.groupId in (select g.idGroup
from belongs b
group by b.idGroup
having count(*) = 5
)
group by b.idMember
having count(*) = 5;
当您处理复杂查询时,请一步一步地构建它们。
注意:group
是一个非常糟糕的表名,因为它是一个保留字。并且,如果您想要表名,那么使用JOIN
加入成员表以获得正确的名称。
编辑:
您可以使用join
从member
获取列:
select b.idMember, m.name
from belongs b join
member m
on b.idMember = m.idMember
where b.groupId in (select g.idGroup
from belongs b
group by b.idGroup
having count(*) = 5
)
group by b.idMember, m.name
having count(*) = 5;