sql >> Base de Datos >  >> RDS >> PostgreSQL

¿Cómo obtener elementos con un número único de una matriz json en PostgreSQL?

Pruebe un enfoque diferente y limpio con 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;

Si no le interesan las filas con valores vacíos o nulos en bank_accounts , use un CROSS JOIN más simple :

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);

El elemento clave para su problema es WITH ORDINALITY que produce números de fila sobre la marcha para funciones de devolución de conjuntos. Se introdujo con Postgres 9.4:funciona para usted, jsonb también se introdujo con 9.4.

Esos son únicos por fila subyacente. Para ser único en toda la tabla, agregue el id de la tabla subyacente.

Detalles para WITH ORDINALITY :

Relacionado: