PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Como iterar pelos valores da matriz jsonb do PostgreSQL para fins de correspondência em uma consulta


Eu resolvi isso essencialmente executando o jsonb_array_elements() do tipo 'unnest()' na minha matriz jsonb aninhada.

Ao fazer isso em uma subconsulta e, em seguida, varrer esses resultados usando uma variação da minha consulta original, consegui alcançar o resultado desejado.

Aqui está o que eu inventei.
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;