sql >> Database >  >> RDS >> PostgreSQL

Waarom kan ik niet rechtstreeks een query uitvoeren op jsonb_array_elements?

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.




  1. Methode org.postgresql.jdbc4.Jdbc4Connection.isValid(int) is nog niet geïmplementeerd

  2. Query wordt snel uitgevoerd, maar wordt traag uitgevoerd in de opgeslagen procedure

  3. Hoe DbContext configureren om te werken met Oracle ODP.Net en EF CodeFirst?

  4. Selecteer waarden uit het XML-veld in SQL Server 2008