あなたの質問に答えるために:はい、それは可能であり、あなたのクエリはまさにそれを行います。fooに3番目の行を導入することでそれを証明できます 表: https://sqlfiddle.com/#!15/06dfe/2
あなたの問題はLEFT JOINではありません json_array_elementsへ ただし、暗黙的な横方向のクロス結合があります。クエリは次と同等です:
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;
https://sqlfiddle.com/#!15/06dfe/5
必要なのは、foo間の横方向の左結合です。 および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;
https://sqlfiddle.com/#!15/06dfe/6