【问题标题】:Joining JSON array with another table将 JSON 数组与另一个表连接
【发布时间】:2019-12-26 09:26:41
【问题描述】:

我的数据是数组格式,例如 [1,2,3] 如何与另一个表连接。这是我正在尝试的查询:

select  
   RCM.header_details->'auditAssertion'as auditassertion
from masters."RCM" RCM
   left join reference."AUDIT_ASSERTION_APPLICATION" as AAA on AAA.id=RCM.header_details->'auditAssertion'

【问题讨论】:

  • 该列的确切数据类型是什么? Postgres 中的原生数组使用花括号显示,例如{1,2,3} 方括号表示jsonb(或json)列
  • 其实RCM是表名,header_details(jsonb)是列名,"auditAssertion": [ "1", "2", "4" ]
  • @a_horse_with_no_name 请建议我适当的解决方案

标签: sql arrays json postgresql


【解决方案1】:

您可以使用? 运算符来检查一个值是否属于 json(b) 数组:

select m.header_details->'auditAssertion'as auditassertion
from masters.rcm m
left join reference.audit_assertion_application a 
    on m.header_details->'auditAssertion' ? a.id::text 

为了性能,Postgres 将支持以下索引:

create index on masters.rcm using gin ((header_details->'auditAssertion'));

【讨论】:

  • 但是我的jsonb类型的数据请帮助我如何加入。
  • @RAHULSONI:是的,这个解决方案适用于jsonb。
  • 但它仍然无法正常工作 ERROR: operator does not exist: jsonb ? bigint LINE 4:在 m.header_details->'auditAssertion' 上? a.id ^ 提示:没有运算符匹配给定的名称和参数类型。您可能需要添加显式类型转换。 SQL 状态:42883 字符:176
  • @RAHULSONI:嗯,好的。考虑:m.header_details->'auditAssertion' ? a.id::text 代替(我更新了我的答案)。
  • 谢谢,@GMB,但这里给出的数据如 [1,2,3,4] 1 和 2 和 3 是参考的 id.audit_assertion_application 显示名称,原样用逗号分隔
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-12-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多