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

Jak pobrać elementy o unikalnym numerze z tablicy json w PostgreSQL?

Wypróbuj inne, czyste podejście z 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;

Jeśli nie interesują Cię wiersze z pustymi lub pustymi wartościami w bank_accounts , użyj prostszego 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);

Kluczowym elementem Twojego problemu jest WITH ORDINALITY który generuje numery wierszy w locie dla funkcji zwracających zestaw. Został wprowadzony w Postgresie 9.4 - działa dla Ciebie, jsonb został również wprowadzony w wersji 9.4.

Są one unikalne w każdym wierszu bazowym. Aby być unikalnym w całej tabeli, dodaj id tabeli poniżej.

Szczegóły dla WITH ORDINALITY :

Powiązane:




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Rozplątanie aktualizacji PostgreSQL

  2. Jak usunąć zduplikowane wpisy?

  3. Najpierw zwiększ licznik i koleje, używając dziwnego zachowania postgreSQL

  4. Niestandardowy SERIAL / autoinkrementacja na grupę wartości

  5. Używanie Django ORM w wątkach i unikanie wyjątków zbyt wielu klientów za pomocą BoundedSemaphore