我们有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行
您可以使用左外连接并使用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