我有两个看起来像这样的表
Organizations
Id (primary_key. big int)
Name (text)
CustomInformations
Id (primary_key. big int)
ConnectedIdentifiers (JSONB)
Info (text)
CustomInformations
的 ConnectedIdentifiers
列包含一个 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/