0

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

SELECT pc.person_id
  FROM groups g
  LEFT OUTER JOIN group_clubs gc ON (gc.group_id = g.id)
  LEFT OUTER JOIN person_club pc ON (gc.club_id = pc.club_id)
 WHERE g.id = 2

我所拥有的:一个具有俱乐部标准的组,用户必须加入。这分为groups桌子、group_clubs桌子和person_club桌子

我想要什么:我想让所有俱乐部中的所有人都与这个团体联系起来。我得到了什么:我得到了至少在一个俱乐部中的所有人。

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

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

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
);

此人应在此声明列出的所有group_clubs 中!

4

2 回答 2

0

感谢一位同事,我得到了答案:

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 找到与 group_clubs 行完全相同的人员,并且可以找到与该组相关联的人员。

于 2013-11-13T15:15:41.430 回答
0

尝试这个:

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 子句),除非您只想检索一个人。

于 2013-11-12T20:51:42.243 回答