我有两张看起来像这样的表
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
我正在尝试JOIN
,CustomInformation
我也可以获取所有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.
这是正确的做法吗?如果是这样,我的语法有什么问题?
由于
答案 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