将结果集与表相交

时间:2016-03-03 16:43:27

标签: sql postgresql relational-division

我有两张桌子。

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

第二个是针对人群的,它有三列(group_idperson_id)。

首先,我要求年龄大于18的人:

SELECT *
FROM people
WHERE age >= 18;

现在我想得到一个包含所有这些人的小组。我该怎么办?

2 个答案:

答案 0 :(得分:2)

你想要一个小组中的所有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);

答案 1 :(得分:0)

您可以尝试以下操作:

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