Untuk menjawab pertanyaan Anda:Ya, itu mungkin dan kueri Anda melakukan hal itu. Kami dapat membuktikannya dengan memasukkan baris ketiga di foo
tabel:http://sqlfiddle.com/#!15/06dfe/2
Masalah Anda bukan pada LEFT JOIN
ke json_array_elements
tetapi dengan gabungan silang lateral implisit. Kueri Anda setara dengan:
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
Yang Anda inginkan adalah gabungan kiri lateral antara foo
dan 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