Para responder a su pregunta:Sí, es posible y su consulta hace exactamente eso. Podemos probarlo introduciendo una tercera fila en foo
tabla:http://sqlfiddle.com/#!15/06dfe/2
Tu problema no es con LEFT JOIN
a json_array_elements
pero con unión cruzada lateral implícita. Su consulta es 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
Lo que quieres es una unión lateral izquierda entre foo
y 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