För att svara på din fråga:Ja, det är möjligt och din fråga gör precis det. Vi kan bevisa det genom att införa en tredje rad i foo
tabell:http://sqlfiddle.com/#!15/06dfe/2
Ditt problem är inte med LEFT JOIN
till json_array_elements
men med implicit tvärfog i sidled. Din fråga motsvarar:
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
Det du vill ha är en lateral vänsterkoppling mellan foo
och 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