postgresql:从表中查询用户以及用户角色列表

vsnjm48y  于 2021-07-29  发布在  Java
关注(0)|答案(1)|浏览(690)

我试图从用户表中查询一个用户,同时从用户角色表中获取一个用户角色列表。这是我的模式:

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)

如何修改它以获得用户拥有的角色列表(数组)?我希望能在一个查询中完成。

disbfnqx

disbfnqx1#

一种选择是在横向联接中聚合:

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 在查询中

相关问题