将结果集与 table 相交

Intersecting a result set with a table

我有两张桌子。

第一个是people,它有三列(idnameage)。

第二个是人物组,它有三列(group_idperson_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

SQLFiddle

你想把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);