sql >> Databáze >  >> RDS >> PostgreSQL

Postgresql levé vnější spojení na poli json

Odpověď na vaši otázku:Ano, je to možné a váš dotaz přesně to dělá. Můžeme to dokázat zavedením třetího řádku do foo tabulka:http://sqlfiddle.com/#!15/06dfe/2

Váš problém není s LEFT JOIN na json_array_elements ale s implicitním bočním křížovým spojením. Váš dotaz je ekvivalentní:

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

Co chcete, je boční levé spojení mezi foo a 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. SQLite KROMĚ operátora

  2. Jak nainstalovat a zabezpečit MariaDB na CentOS 8

  3. Jak získáte výstup ve formátu tabulky z MySQL v neinteraktivním režimu?

  4. Jak zakázat mezipaměť Oracle pro testy výkonu