找不到jsonb_array_elements时不返回行

时间:2019-04-06 18:03:35

标签: json postgresql

我使用交叉联接对嵌套的json值进行嵌套,但是当未归档时,它不返回任何记录。下面使用左连接是否有解决方案?

create table json_example as
select '{"id": "21397",  "fields": { "labels": [] , "subtasks": [{"id": "10217"}] }}'::jsonb as value
union all
select '{"id": "21397",  "fields": { "labels": [] ,  "subtasks" : []  }}'::jsonb

返回两行:

select * from json_example

以下仅返回一行:

select subtasks.value->>'id'  
  from json_example h cross join
       jsonb_array_elements(value->'fields'->'subtasks') as subtasks

我如何解决上述两个记录的问题?

2 个答案:

答案 0 :(得分:0)

您可以添加on true来使left join正常工作。

select subtasks->>'id'  
  from json_example h left join
       jsonb_array_elements(value->'fields'->'subtasks') as subtasks on true

答案 1 :(得分:0)

您无需使用交叉联接,只需执行简单的横向查询即可-调用表函数时甚至不需要LATERAL关键字:

select subtasks.value->>'id'  
  from json_example,
       jsonb_array_elements(value->'fields'->'subtasks') as subtasks

但是您也可以将其放在选择表达式的内部:

select jsonb_array_elements(value->'fields'->'subtasks') ->> 'id'  
  from json_example