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

时间:2020-07-02 00:01:16

标签: sql arrays postgresql join select

我正在尝试从用户表中查询用户,同时还从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)

如何修改它以获取用户角色的列表(数组)?我希望能够在一个查询中做到这一点。

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