使用Postgres子查询中返回JSON数组的值

时间:2014-01-08 22:21:44

标签: sql json postgresql

我有一个包含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。

更新1

在玩完铸造功能之后,我想出了一个有效的解决方案。

id IN (SELECT cast(cast(json_array_elements(properties->'prompts') as text) as integer))

为我工作。

1 个答案:

答案 0 :(得分:0)

投放(转换)"属性 - >>' prompt_ids'"整数

SELECT id FROM prompts WHERE (id IN (array(SELECT properties->>'prompt_ids'::integer FROM "prompts"
WHERE (type = 'Aggregate'))));