Sql 找到两组中的人员
我有一个问题不知道该怎么问,所以我从SQL语句(Postgres)开始: 我所拥有的: 一个具有俱乐部标准的组,用户必须在其中。 这被分为Sql 找到两组中的人员,sql,postgresql,relational-division,Sql,Postgresql,Relational Division,我有一个问题不知道该怎么问,所以我从SQL语句(Postgres)开始: 我所拥有的: 一个具有俱乐部标准的组,用户必须在其中。 这被分为组表、组俱乐部表和个人俱乐部表 我想要的是: 我想让所有俱乐部中的所有人都加入这个团队。 我得到的是: 我得到所有的人,他们至少在一个俱乐部 我被卡住了,不知道如何得到结果,只需要将结果相交,但我现在不知道怎么做 编辑: 为了解释我在寻找什么,这里有一个与此相同的声明: SELECT pc.person_id FROM person_club pc WH
组
表、组俱乐部
表和个人俱乐部
表
我想要的是:
我想让所有俱乐部中的所有人都加入这个团队。
我得到的是:
我得到所有的人,他们至少在一个俱乐部
我被卡住了,不知道如何得到结果,只需要将结果相交,但我现在不知道怎么做
编辑:
为了解释我在寻找什么,这里有一个与此相同的声明:
SELECT pc.person_id
FROM person_club pc
WHERE pc.club_id IN (
SELECT gc.club_id
FROM group_clubs gc
WHERE gc.group_id = 2
);
我想要的是:
SELECT pc.person_id
FROM person_club pc
WHERE pc.club_id IN ALL(
SELECT gc.club_id
FROM group_clubs gc
WHERE gc.group_id = 2
);
该人应在本声明所列的所有集团俱乐部中 试试这个:
SELECT pc.person_id
FROM groups g
INNER JOIN group_clubs gc ON (gc.group_id = g.id)
INNER JOIN person_club pc ON (gc.club_id = pc.club_id)
WHERE g.id = 2
我认为您不需要最后一行(WHERE子句),除非您只想检索一个人 多亏了一位同事,我才得到了答案:
SELECT pc.person_id
FROM person_club_data pc
INNER JOIN group_clubs gc ON (gc.club_id = pc.club_id)
WHERE gc.group_id = 2
GROUP BY pc.person_id
HAVING COUNT(pc.person_id) >= (
SELECT COUNT(gc.club_id)
FROM group_clubs gc2
WHERE gc2.group_id = 2
)
我选择了人员,可以为组2找到与组俱乐部行频率相同的人员以及与此组连接的人员。在oracle中,有一个名为INTERSECT的关键字,因此如果这是标准的,postresql可能具有相同的关键字。查询A INTERSECT查询B将只返回两个查询中的值。@thursdaysgeek:Postgres不支持标准的
INTERSECT
运算符。INTERSECT只在Postgres中的两个查询之间工作。我没有两个问题,因为我可能需要12个俱乐部的兴趣,因为这个群体可以有12个俱乐部作为标准。我对这个问题做了更多的解释!我添加了relationaldivision标记。这个问题是reldiv的一个典型例子。如果你在右边带上相关的
问题,你可能会找到你想要的。我建议使用双重否定类型的查询。谢谢,但是在这个语句中,内部连接和左外部连接没有区别!我得到了完全相同的身份证
SELECT pc.person_id
FROM person_club_data pc
INNER JOIN group_clubs gc ON (gc.club_id = pc.club_id)
WHERE gc.group_id = 2
GROUP BY pc.person_id
HAVING COUNT(pc.person_id) >= (
SELECT COUNT(gc.club_id)
FROM group_clubs gc2
WHERE gc2.group_id = 2
)