我们有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行
答案 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