我有一个包含 JSON 列的表。在那个 json 中有一个包含 ID 数组的键。
我需要使用这些 ID 作为平面数组返回,以便我可以在“IN”子句中使用它们。
这里是我所在的地方:
SELECT id FROM prompts WHERE (id IN (array(SELECT properties->>'prompt_ids' FROM "prompts" WHERE (type = 'Aggregate'))));
这会产生以下错误:
ERROR: operator does not exist: integer = text[]
当我单独运行该子查询时,我得到:
SELECT properties->>'prompts' FROM "prompts" WHERE (type = 'Aggregate');
?column?
-----------
[15,16]
[3,49,50]
(2 rows)
我想我可能需要编写一个函数来将数组中的这些值转换为整数,但我仍然不确定。
我正在使用 PostgreSQL 9.3。
更新1
在尝试转换函数之后,我想出了一个可行的解决方案,尽管很粗糙。
id IN (SELECT cast(cast(json_array_elements(properties->'prompts') as text) as integer))
为我工作。
最佳答案
将“properties->>'prompt_ids'”转换(转换)为整数
SELECT id FROM prompts WHERE (id IN (array(SELECT properties->>'prompt_ids'::integer FROM "prompts"
WHERE (type = 'Aggregate'))));
关于sql - 使用来自返回 JSON 数组的 Postgres 子查询的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21007845/