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

Cómo iterar a través de los valores de matriz jsonb de PostgreSQL con el fin de hacer coincidir dentro de una consulta

Resolví esto esencialmente realizando el jsonb_array_elements() similar a 'unnest()' en mi matriz jsonb anidada.

Al hacer esto en una subconsulta y luego escanear esos resultados usando una variación de mi consulta original, pude lograr el resultado deseado.

Esto es lo que se me ocurrió.

with dupe as (
select
json_document->>'Name' as name,
identifiers->'RecordID' as record_id
from (
  select *,  
  jsonb_array_elements(json_document->'Identifiers') as identifiers
  from staging
) sub
group by record_id, json_document
order by name
) 

select * from dupe da where (select count(*) from dupe db where 
db.record_id = da.record_id) > 1;