PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Postgresql lewy zewnętrzny sprzężenie w tablicy json

Aby odpowiedzieć na Twoje pytanie:Tak, jest to możliwe i dokładnie to robi Twoje zapytanie. Możemy to udowodnić, wprowadzając trzeci wiersz w foo tabela:http://sqlfiddle.com/#!15/06dfe/2

Twój problem nie dotyczy LEFT JOIN do json_array_elements ale z niejawnym poprzecznym połączeniem krzyżowym. Twoje zapytanie jest równoważne z:

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

To, czego potrzebujesz, to boczne lewe połączenie między foo i 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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak wstawić listę Pythona do tabeli Postgres

  2. zmień bazę danych (postgresql) w pythonie za pomocą psycopg2 dynamicznie

  3. PostgreSQL — skorelowane podzapytanie nie powiodło się?

  4. Jak włączyć TimescaleDB w istniejącej bazie danych PostgreSQL

  5. Potrzebujesz wyjaśnień na temat typów znaków w PostgreSQL