首页 > 解决方案 > 在 Postgres 的 jsonb_array_elements_text 函数中使用 SELECT 子查询

问题描述

我有以下查询

SELECT DISTINCT ON (user_id) user_id, timestamp
FROM entries 
WHERE user_id in (1,2)
AND entry_type IN(
  SELECT jsonb_array_elements_text(
    SELECT entry_types 
    FROM users INNER JOIN orgs
    ON org_id = orgs.id 
    WHERE users.id = 1
  )
);

我在选择处或附近遇到语法错误

“选择”第 1 行或附近的语法错误: ... entry_type in( select jsonb_array_elements_text( slect ent .

字段 entry_types 是一个 JSONB 字段,因此我尝试将其转换为文本以便在 WHERE IN 子句中使用它。

PostgreSQL 13.0

jsonb_array_elements_text 中的这个子查询

SELECT entry_types 
    FROM users INNER JOIN orgs
    ON org_id = orgs.id 
    WHERE users.id = 1

返回一个 JSONB 条目,如下所示:

                entry_types                     
--------------------------------------------  
["type1", "type2", "type3"]

我只是试图使用那里返回的文本值数组作为 WHERE IN 子句中的条件。

标签: postgresqlsubquerypsqljsonb

解决方案


语法错误似乎指向其他地方,所以也许我错了,但我看到的问题是子查询周围缺少一对括号:

jsonb_array_elements_text((SELECT ...))

推荐阅读