我正在尝试从用户表中查询用户,同时还从user_role表中获取用户角色列表。这是我的架构:
user
---------------------
|uuid | username |
---------------------
|xxx-xx-x| Joe |
---------------------
user_role
----------------------
|user_uuid| role_uuid |
----------------------
|xxx-xx-x | yyy-yy-y |
----------------------
|xxx-xx-x | zzz-zz-z |
----------------------
role
----------------------
|role_uuid| name |
----------------------
|yyy-yy-y | Moderator |
----------------------
|zzz-zz-z | Tester |
----------------------
这是我当前仅查询用户信息的查询:
SELECT u.uuid, u.username FROM user AS u WHERE u.uuid = ($1)
如何修改它以获取用户角色的列表(数组)?我希望能够在一个查询中做到这一点。
答案 0 :(得分:0)
一种选择是在横向联接中聚合:
SELECT u.uuid, u.username, r.role_names
FROM users AS u
CROSS JOIN LATERAL (
SELECT array_agg(r.name) role_names
FROM role r
INNER JOIN user_role ur on ur.role_uuid = r.role_uuid
WHERE ur.user_uuid = u.uuid
) r
WHERE u.uuid = $1
注意:
括号
user
是一个SQL关键字,因此不是表名的好选择-我在查询中将其重命名为users