Om uw vraag te beantwoorden:Ja, het is mogelijk en uw vraag doet precies dat. We kunnen het bewijzen door een derde rij in foo
te introduceren tabel:http://sqlfiddle.com/#!15/06dfe/2
Uw probleem ligt niet bij LEFT JOIN
naar json_array_elements
maar met impliciete laterale kruisverbinding. Uw zoekopdracht is gelijk aan:
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
Wat je wilt is een laterale linker join tussen foo
en 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