Um Ihre Frage zu beantworten:Ja, es ist möglich und Ihre Abfrage tut genau das. Wir können es beweisen, indem wir eine dritte Zeile in foo
einfügen Tabelle:http://sqlfiddle.com/#!15/06dfe/2
Ihr Problem liegt nicht bei LEFT JOIN
zu json_array_elements
aber mit implizitem seitlichem Cross Join. Ihre Abfrage entspricht:
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
Was Sie wollen, ist eine seitliche linke Verknüpfung zwischen foo
und 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