在 Postgres 的 jsonb_array_elements_text 函数中使用 SELECT 子查询
Posted
技术标签:
【中文标题】在 Postgres 的 jsonb_array_elements_text 函数中使用 SELECT 子查询【英文标题】:Using SELECT sub-query inside jsonb_array_elements_text function in Postgres 【发布时间】:2020-11-06 18:29:08 【问题描述】:我有以下问题
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
)
);
我在 select 处或附近遇到语法错误
“select”第 1 行或附近的语法错误:... entry_type in(select jsonb_array_elements_text(s选择。
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 子句中的条件。
【问题讨论】:
请提供样本数据、期望的结果以及对查询目的的解释。不明显。 @GMB 我添加了一些细节,让我知道这是否足够。 【参考方案1】:语法错误似乎指向其他地方,所以也许我错了,但我看到的问题是子查询周围缺少一对括号:
jsonb_array_elements_text((SELECT ...))
【讨论】:
以上是关于在 Postgres 的 jsonb_array_elements_text 函数中使用 SELECT 子查询的主要内容,如果未能解决你的问题,请参考以下文章
Postgres:使用psycopg2或附近未终止的引用字符串
Postgres 日志文件包含:pg_toast_2619 中的 toast 值 815441 缺少块号 0