我使用交叉联接对嵌套的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
我如何解决上述两个记录的问题?
答案 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