【问题标题】:PostgreSQL: Query user from table along with list of user rolesPostgreSQL:从表中查询用户以及用户角色列表
【发布时间】:2020-10-22 11:59:51
【问题描述】:

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

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

【问题讨论】:

    标签: sql arrays postgresql join select


    【解决方案1】:

    一种选择是横向连接中的聚合:

    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

    【讨论】:

      猜你喜欢
      • 2016-08-01
      • 2023-04-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-02
      • 2022-12-12
      • 1970-01-01
      • 2022-07-06
      相关资源
      最近更新 更多