我有一个包含JSON列的表。在那个json中有一个包含Ids数组的键。
我需要使用这些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。
在玩完铸造功能之后,我想出了一个有效的解决方案。
id IN (SELECT cast(cast(json_array_elements(properties->'prompts') as text) as integer))
为我工作。
答案 0 :(得分:0)
投放(转换)"属性 - >>' prompt_ids'"整数
SELECT id FROM prompts WHERE (id IN (array(SELECT properties->>'prompt_ids'::integer FROM "prompts"
WHERE (type = 'Aggregate'))));