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

问题描述 投票:2回答:1

我们有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

如何在一个查询中选择年龄> 18岁,年龄<30岁的所有用户?没有重复的用户信息

结果应该有2行

  • 有关id为1的用户及其角色的信息
  • 有关id为2的用户及其角色的信息
postgresql
1个回答
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 
© www.soinside.com 2019 - 2024. All rights reserved.