PostGres使用JSONB加入

时间:2017-12-17 22:42:20

标签: postgresql jsonb

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

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

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

CustomInformations' ConnectedIdentifiers列包含JSONB结构,看起来像

{ 'organizations': [1,2,3] }

这意味着,有一些组织1, 2, 3,与特定CustomInformation

相关的组织

我正在尝试JOINCustomInformation我也可以获取所有Organizations名称

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

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

我收到了错误No operator matches the given name and argument type(s). You might need to add explicit type casts.

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

由于

1 个答案:

答案 0 :(得分:0)

您不能以这种方式使用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