在PostgreSQL中用多个表编写JOIN查询

时间:2015-02-10 21:48:41

标签: sql postgresql

我有3张看起来像这样的表:

Users
----------
UserID
Name
Phone

User Groups
-----------
GroupID
GroupActivity

Group Membership
---------------
UserID
GroupID

我正在尝试打印成员进行某项活动的所有群组的用户名和电话号码。例如,组1活动=编织,组2活动=缝纫,组3活动=编织。我想选择所有正在编织的成员,但我不确定如何在一个查询中加入这三个表。这是我到目前为止所尝试的:

SELECT                                                                   
users.name, users.phone, groups.activity  
FROM users
INNER JOIN group_membership ON group_membership.userID = users.userID 
WHERE groups.activity = 'Knitting';

这最终会引发以下错误:

  

错误:缺少表“groups”的FROM子句条目

要解决此问题,我尝试将teams添加到FROM子句中,如下所示:

FROM users,groups

但是,这反过来又给了我这个错误:

  

错误:对表“members”

的FROM子句条目的无效引用

任何帮助都将不胜感激。

2 个答案:

答案 0 :(得分:0)

试试这个

SELECT                                                                   
users.name, users.phone, user_groups.activity  
FROM users 
INNER JOIN group_membership ON group_membership.userID = users.userID 
inner join user_groups on user_groups.groupid = group_membership.groupid
WHERE user_groups.activity = 'Knitting';

答案 1 :(得分:0)

使用表别名和USING子句可以缩短它:

SELECT ug.groupid, u.name, u.phone
FROM   user_groups ug
JOIN   group_membership USING (groupid)
JOIN   users u          USING (userid)
WHERE  ug.activity = 'knitting';

Details in the manual here.