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

Postgresql venstre ydre joinforbindelse på json-array

For at besvare dit spørgsmål:Ja, det er muligt, og din forespørgsel gør præcis det. Vi kan bevise det ved at introducere en tredje række i foo tabel:http://sqlfiddle.com/#!15/06dfe/2

Dit problem er ikke med LEFT JOIN til json_array_elements men med implicit lateral krydssamling. Din forespørgsel svarer til:

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

Det du ønsker er en lateral venstre sammenføjning mellem foo og 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




  1. Hvordan gendanner man PostgreSQL-dumpfilen i Postgres-databaser?

  2. databasekodningsproblem? Dobbelte og enkelte anførselstegn vises med spørgsmålstegn

  3. Slettede rækker fra reflekteret tabel med SQLAlchemy

  4. hvordan man kontrollerer og indstiller max_allowed_packet mysql variabel