あなたの質問に答えるために:はい、それは可能であり、あなたのクエリはまさにそれを行います。foo
に3番目の行を導入することでそれを証明できます 表: http://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;
http://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;
http://sqlfiddle.com/#!15/06dfe/6