Zoals de foutmelding zegt, argumenten voor WHERE
mag een set niet retourneren. jsonb_array_elements
retourneert een set en kan niet worden vergeleken met een enkele waarde. In de tweede query heb je een cross join in de select en dat converteert het naar een geschikt resultaat om WHERE
te gebruiken aan.
Je kunt het ook op deze manier doen
SELECT mydata.pk FROM mydata
WHERE 'Bob' in (SELECT jsonb_array_elements(mydata.data->'people')->>'name');
Hier kunt u met de subselect de IN
. gebruiken operator om de gewenste waarde te vinden, aangezien het resultaat niet langer een set is.
Een andere manier is om de jsonb rechtstreeks op te vragen
SELECT mydata.pk FROM mydata
WHERE mydata.data->'people' @> '[{"name":"Bob"}]'::jsonb;
Op deze manier hoeft u de jsonb niet om te zetten in een resultatenset en erin te zoeken.