PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Postgresql ha lasciato il join esterno sull'array json

Per rispondere alla tua domanda:Sì, è possibile e la tua richiesta fa esattamente questo. Possiamo dimostrarlo introducendo una terza riga in foo tabella:http://sqlfiddle.com/#!15/06dfe/2

Il tuo problema non è con LEFT JOIN a json_array_elements ma con giunzione trasversale laterale implicita. La tua richiesta equivale 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

Quello che vuoi è un join laterale sinistro tra foo e 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