PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Postgresql Left Outer Join auf JSON-Array

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