postgresql - PostGres 加入 Using JSONB

标签 postgresql jsonb

我有两个看起来像这样的表

Organizations
Id (primary_key. big int)
Name (text)

CustomInformations
Id (primary_key. big int)
ConnectedIdentifiers (JSONB)
Info (text)

CustomInformationsConnectedIdentifiers 列包含一个 JSONB 结构,看起来像

{ '组织': [1,2,3] }

这意味着有一个组织数组,其 ID 为 1、2、3,,这些组织与特定的 CustomInformation

相关

我正在尝试做一个 JOIN,其中给定一个 CustomInformation Id 也会让我得到所有的 Organizations 名称

我在看了一些例子后尝试了这个:

SELECT * FROM CustomInformations ci
INNER JOIN Organizations o on jsonb_array_elements(ci.ConnectedIdentifiers->'19') = o.id
WHERE
   ci.id = 5

我得到一个错误 没有运算符匹配给定的名称和参数类型。您可能需要添加显式类型转换。

这是正确的方法吗?如果是这样,我的语法有什么问题?

谢谢

最佳答案

您不能以这种方式使用 jsonb_array_elements(),因为该函数返回行集。它应该放在横向连接中。使用 jsonb_array_elements_text() 获取数组元素作为文本并将这些元素转换为 bigint:

select ci.*, o.*
from custominfo ci
-- lateral join 
cross join jsonb_array_elements_text(ci.connectedidentifiers->'organizations') ar(elem)
join organizations o 
on elem::bigint = o.id
where ci.id = 5

关于postgresql - PostGres 加入 Using JSONB,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47860186/

相关文章:

sql - 如何从 JSONB、VARCHAR 和 DATE 类型的列创建 Postgresql 生成的 JSONB 类型的列

java - java日期对象默认的Jsonb序列化格式是什么

postgresql - 在 jsonb 字段内深度搜索 PostgreSQL

sql - 有效地查找给定日期之前的多个最近日期?

postgresql - 是否可以在 postgres 中截断 pg_largeobject 表?

java - JAX-RS:对遗留对象的 JSON 反序列化 - 如何为遗留接口(interface)提供帮助器/工厂?

postgresql - 在 Postgresql 中从 JSONB 中提取值

arrays - JSONB 或整数数组

postgresql - 为什么 emacs 找不到 psql?

postgresql - docker-compose:访问 postgres 的外壳(psql)