将结果集与 table 相交
Intersecting a result set with a table
我有两张桌子。
第一个是people
,它有三列(id
、name
、age
)。
第二个是人物组,它有三列(group_id
、person_id
)。
首先我有一个查询来获取年龄大于等于 18 岁的人:
SELECT *
FROM people
WHERE age >= 18;
现在我想要一个包含所有这些人的群组。我该怎么做?
您可以尝试以下方法:
select pg.group_id
from people_group pg
left join people p on p.id = pg.person_id and p.age >= 18
group by pg.group_id
having sum(case when p.id is null then 1 end) is null
你想把18岁以上的都一个团吗?好吧,让我们数一数,看看数字是否匹配:
select pg.group_id
from people_group pg join
people p
on pg.person_id = p.id and p.age >= 18
group by pg.group_id
having count(distinct pg.person_id) = (select count(*) from people where age >= 18);
我有两张桌子。
第一个是people
,它有三列(id
、name
、age
)。
第二个是人物组,它有三列(group_id
、person_id
)。
首先我有一个查询来获取年龄大于等于 18 岁的人:
SELECT *
FROM people
WHERE age >= 18;
现在我想要一个包含所有这些人的群组。我该怎么做?
您可以尝试以下方法:
select pg.group_id
from people_group pg
left join people p on p.id = pg.person_id and p.age >= 18
group by pg.group_id
having sum(case when p.id is null then 1 end) is null
你想把18岁以上的都一个团吗?好吧,让我们数一数,看看数字是否匹配:
select pg.group_id
from people_group pg join
people p
on pg.person_id = p.id and p.age >= 18
group by pg.group_id
having count(distinct pg.person_id) = (select count(*) from people where age >= 18);