2016-06-12 21 views
1

我必须得到成员是五个不同的群体和团体应该有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 

而且我不知道如何与同组属于

+1

你可以添加一些示例数据和预期输出 –

+0

是啊,我正要然后我意识到我不得不做出像批量数据并手动缩进它是一种痛苦,是否有一种更简单的方法来制作它? –

+0

从不在'from'子句中使用逗号。 –

回答

4

方法步骤这种类型的问题。如果你想限制

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表中以得到正确的名字。

编辑:

您可以使用joinmember得到列:

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

我尝试过应用它,但我似乎无法从会员列表中选择列,并且在这里发布的内容可以帮助我吗? –