sql >> Database teknologi >  >> RDS >> PostgreSQL

Hvordan får man elementer med et unikt nummer fra et json-array i PostgreSQL?

Prøv en anden, ren tilgang med 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;

Hvis du er ligeglad med rækker med tomme eller null-værdier i bank_accounts , brug en enklere 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);

Nøgleelementet for dit problem er WITH ORDINALITY som producerer rækkenumre i farten til sæt-retur-funktioner. Det blev introduceret med Postgres 9.4 - virker for dig, jsonb blev også introduceret med 9.4.

Disse er unikke pr. underliggende række. For at være unik på tværs af hele tabellen skal du tilføje id af den underliggende tabel.

Detaljer for WITH ORDINALITY :

Relateret:




  1. Laravel Sail genopbygge standarddatabasen

  2. Find dublerede rækker i SQL Server

  3. Sådan fjerner du de efterfølgende mellemrum efter månedens navn i Oracle

  4. Hvordan tilføjer man brugerdefinerede attributter til SQL-forbindelsesstrengen?