sql >> Databáze >  >> RDS >> PostgreSQL

Jak získat prvky s jedinečným číslem z pole json v PostgreSQL?

Vyzkoušejte jiný, čistý přístup pomocí 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;

Pokud vás nezajímají řádky s prázdnými nebo nulovými hodnotami v bank_accounts , použijte jednodušší 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);

Klíčovým prvkem vašeho problému je WITH ORDINALITY který za běhu vytváří čísla řádků pro funkce vracející sady. Byl představen s Postgres 9.4 – funguje pro vás, jsonb byl také představen s 9.4.

Ty jsou jedinečné pro každý podkladový řádek. Chcete-li být jedinečný v celé tabulce, přidejte id podkladové tabulky.

Podrobnosti pro WITH ORDINALITY :

Související:




  1. Jak importovat a exportovat databázi přes SSH

  2. Jak lze v Oracle zřetězit více řádků do jednoho bez vytvoření uložené procedury?

  3. Jsme připraveni na severský PGDay?

  4. LINQ to SQL Take bez přeskakování způsobuje více příkazů SQL