sql >> Base de Datos >  >> RDS >> PostgreSQL

Unión externa izquierda de Postgresql en matriz json

Para responder a su pregunta:Sí, es posible y su consulta hace exactamente eso. Podemos probarlo introduciendo una tercera fila en foo tabla:http://sqlfiddle.com/#!15/06dfe/2

Tu problema no es con LEFT JOIN a json_array_elements pero con unión cruzada lateral implícita. Su consulta es equivalente a:

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

Lo que quieres es una unión lateral izquierda entre foo y 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