PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Postgresql jointure externe gauche sur le tableau json

Pour répondre à votre question :Oui, c'est possible et votre requête fait exactement cela. Nous pouvons le prouver en introduisant une troisième ligne dans foo tableau :http://sqlfiddle.com/#!15/06dfe/2

Votre problème n'est pas avec LEFT JOIN à json_array_elements mais avec une jointure croisée latérale implicite. Votre requête équivaut à :

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

Ce que vous voulez, c'est une jointure latérale gauche entre foo et 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