PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Postgresql deixou a junção externa no array json


Para responder à sua pergunta:Sim, é possível e sua consulta faz exatamente isso. Podemos provar isso introduzindo uma terceira linha em foo tabela:http://sqlfiddle.com/#!15/06dfe/2

Seu problema não é com LEFT JOIN para json_array_elements mas com junção cruzada lateral implícita. Sua consulta é equivalente a:
SELECT *
FROM foo 
  CROSS JOIN LATERAL json_array_elements (foo.bars :: json) foo_bars 
  LEFT OUTER JOIN bar ON (foo_bars ->> 'id') :: BIGINT = bar.ID;

http://sqlfiddle.com/#!15/06dfe/5

O que você quer é uma junção lateral esquerda entre foo e json_array_elements :
SELECT *
FROM foo LEFT JOIN LATERAL
    json_array_elements (foo.bars :: json) foo_bars ON true
LEFT OUTER JOIN bar ON (foo_bars ->> 'id') :: BIGINT = bar.ID;

http://sqlfiddle.com/#!15/06dfe/6