Som fejlmeddelelsen siger, argumenter til WHERE
må ikke returnere et sæt. jsonb_array_elements
returnerer et sæt, og det kan ikke sammenlignes med en enkelt værdi. I den anden forespørgsel har du en krydssammenføjning inde i select, og som konverterer den til et passende resultat for at bruge WHERE
på.
Du kan også gøre det på denne måde
SELECT mydata.pk FROM mydata
WHERE 'Bob' in (SELECT jsonb_array_elements(mydata.data->'people')->>'name');
Her vil undervalget give dig mulighed for at bruge IN
operatør for at finde den ønskede værdi, da resultatet ikke længere er et sæt.
En anden måde er at forespørge jsonb direkte
SELECT mydata.pk FROM mydata
WHERE mydata.data->'people' @> '[{"name":"Bob"}]'::jsonb;
På denne måde behøver du ikke konvertere jsonb til et resultatsæt og søge i det.