如何在SQL Server中放置两个条件?
问题描述:
我必须得到成员是五个不同的群体和团体应该有5名成员每个如何在SQL Server中放置两个条件?
-
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
而且我不知道如何与同组属于
答
方法步骤这种类型的问题。如果你想限制
select b.idGroup
from belongs b
group by b.idGroup
having count(*) = 5;
(有趣的对称。)
:下面获取在五组的成员:
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;
下获取有五名成员组首先查询到第二组中的组,然后一个简单的方法是使用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
加入到members表中以得到正确的名字。
编辑:
您可以使用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;
+0
非常感谢,这比我想象的要简单 –
+0
我尝试过应用它,但我似乎无法从会员列表中选择列,并且在这里发布的内容可以帮助我吗? –
你可以添加一些示例数据和预期输出 –
是啊,我正要然后我意识到我不得不做出像批量数据并手动缩进它是一种痛苦,是否有一种更简单的方法来制作它? –
从不在'from'子句中使用逗号。 –