sql - 使用来自返回 JSON 数组的 Postgres 子查询的值

标签 sql json postgresql

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

相关文章:

java - 在循环中构建嵌套 JSON

postgresql - PostgreSQL 中 UUID 的校验和

PostgreSQL : can't connect with new created users

mysql - 连接同一主键 MYSQL 上的三个表

javascript - Highcharts C# 到 JSON - 构建系列数据

sql - 理解复杂 SQL 语句的最佳方式?

javascript - 显示开放天气 API 响应中的日期名称而不是数字

javascript - 使用 Node.js 和 AWS Lambda 将 S3 文件的内容记录到 postgres 表

sql - 在 PL/PGSQL 动态 SQL 内部函数中引用局部变量

MySQL 唯一索引错误?