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

Как да получите елементи с уникален номер от json масив в PostgreSQL?

Опитайте различен, чист подход с JOIN LATERAL :

select b.id, t.rn
     , t.account->>'name' AS name
     , t.account->>'balance' AS balance
FROM   bank_accounts b
LEFT   JOIN LATERAL jsonb_array_elements(b.bank_accounts)
                    WITH ORDINALITY AS t (account, rn) ON true;

Ако не ви е грижа за редове с празни или нулеви стойности в bank_accounts , използвайте по-опростен CROSS JOIN :

select b.id, t.rn
     , t.account->>'name' AS name
     , t.account->>'balance' AS balance
FROM   bank_accounts b
     , jsonb_array_elements(b.bank_accounts) WITH ORDINALITY AS t (account, rn);

Ключовият елемент за вашия проблем е WITH ORDINALITY който произвежда номера на редове в движение за функции, връщащи множество. Беше представен с Postgres 9.4 - работи за вас, jsonb също беше въведен с 9.4.

Те са уникални за всеки основен ред. За да бъдете уникални в цялата таблица, добавете id на основната таблица.

Подробности за WITH ORDINALITY :

Свързани:




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Postgresql ORDER BY интервали

  2. как да емулирам вмъкване игнориране и при актуализиране на дублиран ключ (sql обединяване) с postgresql?

  3. Изчислете резултата от месечните периодични приходи (MRR) с помощта на postgres

  4. ГРЕШКА:масивът не трябва да съдържа нули PostgreSQL

  5. Как работи функцията Degrees() в PostgreSQL