sql >> Databasteknik >  >> RDS >> PostgreSQL

Hur får man element med ett unikt nummer från en json-array i PostgreSQL?

Prova ett annat, rent tillvägagångssätt 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;

Om du inte bryr dig om rader med tomma eller nullvärden i bank_accounts , använd en enklare 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);

Nyckelelementet för ditt problem är WITH ORDINALITY som producerar radnummer i farten för set-returfunktioner. Det introducerades med Postgres 9.4 - fungerar för dig, jsonb introducerades också med 9.4.

Dessa är unika per underliggande rad. För att vara unik över hela tabellen, lägg till id i den underliggande tabellen.

Detaljer för WITH ORDINALITY :

Relaterat:




  1. Återgå en markör från en inre procedur till yttre procedur i oracle pl/sql

  2. Hur kombinerar man LIKE med IN i en MYSQL-fråga?

  3. Postgres triggerfunktion

  4. Hur mappar man TYPE TABELL FÖR VARCHAR2(5) i java?