postgresql 从JSON字段中选择并仅返回匹配的值

kiz8lqtg  于 2023-11-18  发布在  PostgreSQL
关注(0)|答案(1)|浏览(114)

我试图找到一种方法来返回匹配的角色(S)为下面的查询,但不确定是否可能在所有。我环顾四周,但找不到任何东西。

SELECT
/* here return either 'user' or 'user,admin' */
FROM users
WHERE
id = 'xyz' AND
roles::jsonb ?| array['user','admin'];

字符串
DB中的字段(json类型)以及查询结果应该是什么样子

roles: ["manager"]      -> should return nothing
roles: ["user"]         -> should return 'user'
roles: ["admin"]        -> should return 'admin'
roles: ["user","admin"] -> should return 'user,admin'

7eumitmz

7eumitmz1#

实现所需结果的一种方法是 jsonb_array_elements_textjson数组中删除嵌套,然后使用where子句过滤角色。类似于:

WITH matched_roles AS (
    SELECT
        id,
        jsonb_array_elements_text(roles) AS role
    FROM
        users
    WHERE
        id = 'xyz' AND
        roles::jsonb ?| array['user', 'admin']
)
SELECT
    string_agg(role, ',') AS matched_roles
FROM
    matched_roles;

字符串

相关问题