Sql 找到两组中的人员

Sql 找到两组中的人员,sql,postgresql,relational-division,Sql,Postgresql,Relational Division,我有一个问题不知道该怎么问,所以我从SQL语句(Postgres)开始: 我所拥有的: 一个具有俱乐部标准的组,用户必须在其中。 这被分为组表、组俱乐部表和个人俱乐部表 我想要的是: 我想让所有俱乐部中的所有人都加入这个团队。 我得到的是: 我得到所有的人,他们至少在一个俱乐部 我被卡住了,不知道如何得到结果,只需要将结果相交,但我现在不知道怎么做 编辑: 为了解释我在寻找什么,这里有一个与此相同的声明: SELECT pc.person_id FROM person_club pc WH

我有一个问题不知道该怎么问,所以我从SQL语句(Postgres)开始:

我所拥有的: 一个具有俱乐部标准的组,用户必须在其中。 这被分为
表、
组俱乐部
表和
个人俱乐部

我想要的是: 我想让所有俱乐部中的所有人都加入这个团队。 我得到的是: 我得到所有的人,他们至少在一个俱乐部

我被卡住了,不知道如何得到结果,只需要将结果相交,但我现在不知道怎么做

编辑: 为了解释我在寻找什么,这里有一个与此相同的声明:

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
 )