如何在 SQL 服务器中加入两个条件?
How do I put two conditions in having in SQL Server?
我必须让成员属于五个不同的组,每个组应该有 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
而且我不知道如何关联属于组
逐步解决此类问题。以下获取五个组中的成员:
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 以获得正确的名称。
编辑:
您可以使用 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;
我必须让成员属于五个不同的组,每个组应该有 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
而且我不知道如何关联属于组
逐步解决此类问题。以下获取五个组中的成员:
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 以获得正确的名称。
编辑:
您可以使用 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;