我有一个问题我不知道怎么问对,所以我从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_club!
答案 0 :(得分: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子句),除非您想要检索一个人。
答案 1 :(得分: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行完全相同的人,并且他们与该组相关联。