PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Postgresql ляво външно съединяване на json масив

За да отговоря на въпроса ви:Да, възможно е и вашата заявка прави точно това. Можем да го докажем, като въведем трети ред в foo таблица:http://sqlfiddle.com/#!15/06dfe/2

Проблемът ви не е с LEFT JOIN към json_array_elements но с имплицитно странично кръстосано съединение. Вашата заявка е еквивалентна на:

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

Това, което искате, е странично ляво съединение между foo и 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. Restful Api експресна база данни на postgres

  2. Синтактична грешка при или близо до WHERE

  3. Грешка при недефиниран метод `to_key' за [xxx] :Array при опит за използване на данни от масив на Active Admin table_for (Rails, Postgresql, postgres_ext gem)

  4. Получете точен резултат за делене на числа

  5. Postgres psql извежда низове без екраниращи знаци