PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Perché non posso eseguire query direttamente su jsonb_array_elements?

Come dice il messaggio di errore, argomenti per WHERE non deve restituire un set. jsonb_array_elements restituisce un set e non può essere confrontato con un singolo valore. Nella seconda query hai un cross join all'interno di select e questo lo converte in un risultato adatto per usare WHERE acceso.

Puoi farlo anche in questo modo

SELECT mydata.pk FROM mydata
  WHERE 'Bob' in (SELECT jsonb_array_elements(mydata.data->'people')->>'name');

Qui la sottoselezione ti consentirà di utilizzare il IN per trovare il valore desiderato poiché il risultato non è più un insieme.

Un altro modo è interrogare direttamente jsonb

SELECT mydata.pk FROM mydata
  WHERE mydata.data->'people' @> '[{"name":"Bob"}]'::jsonb;

In questo modo non è necessario convertire jsonb in un set di risultati e cercare al suo interno.