如何在 SQL 服务器中加入两个条件?

How do I put two conditions in having in SQL Server?

我必须让成员属于五个不同的组,每个组应该有 5 名成员

群有成员,成员在群里,一个成员可以在多个群里,但是一个成员不能在同一个群里两次

我做了类似的东西

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.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 对于 table 来说是一个非常糟糕的名称,因为它是一个保留字。而且,如果您想要 table 名称,请使用 JOIN 加入成员 table 以获得正确的名称。

编辑:

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