在PostgreSQL中的一个查询中选择子集合

时间:2017-12-21 15:28:55

标签: postgresql

我们有2张桌子

users
id|name|age
1|John|20
2|Bill|22

user_roles
id|user_id|role
1|1|moderator
2|1|admin
3|2|moderator

如何选择所有用户,年龄&gt; 18岁和年龄< 30,他们在一个查询中的所有角色?没有重复的用户信息

结果应该有2行

  • 有关身份1及其角色
  • 的用户的信息
  • 有关身份2及其角色
  • 的用户的信息

1 个答案:

答案 0 :(得分:3)

您可以使用左外连接并使用ARRAY_AGG聚合角色:

SELECT u.id, u.name, u.age, ARRAY_AGG(r.role) 
FROM users u LEFT OUTER JOIN user_roles r ON u.id = r.user_id 
WHERE age BETWEEN 19 AND 29 
GROUP BY u.id, u.name, u.age

如果您想为每个角色分别设置一行,请尝试:

SELECT u.id, u.name, u.age, r.role
FROM users u LEFT OUTER JOIN user_roles r ON u.id = r.user_id 
WHERE age BETWEEN 19 AND 29