sql >> Database >  >> RDS >> PostgreSQL

Hoe elementen met een uniek nummer uit een json-array in PostgreSQL te krijgen?

Probeer een andere, schone aanpak met 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;

Als u niet geeft om rijen met lege of null-waarden in bank_accounts , gebruik een eenvoudigere 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);

Het belangrijkste element voor uw probleem is WITH ORDINALITY die on-the-fly rijnummers produceert voor set-retourfuncties. Het werd geïntroduceerd met Postgres 9.4 - werkt voor jou, jsonb werd ook geïntroduceerd met 9.4.

Die zijn uniek per onderliggende rij. Voeg de id . toe om uniek te zijn in de hele tabel van de onderliggende tabel.

Details voor WITH ORDINALITY :

Gerelateerd:




  1. Formules om geografische nabijheid te berekenen

  2. Gegevens aggregeren met OVERPARTITIE op datum

  3. python 5x langzamer dan perl mySql-query

  4. PHP en MySQL kleinst en grootst mogelijke datum