如何在SQL Server中添加两个条件?

时间:2016-06-12 15:24:19

标签: sql sql-server having

我必须得到五个不同组的成员,这些组应该有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

并且我不知道如何将属于群组

1 个答案:

答案 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加入成员表以获得正确的名称。

编辑:

您可以使用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;