sql >> Databasteknik >  >> RDS >> PostgreSQL

Varför kan jag inte fråga direkt på jsonb_array_elements?

Som felmeddelandet säger, argument till WHERE får inte returnera ett set. jsonb_array_elements returnerar en uppsättning och den kan inte jämföras med ett enda värde. I den andra frågan har du en korskoppling inuti select och som omvandlar den till ett lämpligt resultat för att använda WHERE på.

Du kan också göra det på det här sättet

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

Här låter undervalet dig använda IN operatorn för att hitta det önskade värdet eftersom resultatet inte längre är en uppsättning.

Ett annat sätt är att fråga jsonb direkt

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

På så sätt behöver du inte konvertera jsonb till en resultatuppsättning och söka i den.




  1. hur kan jag räkna status ändrad/uppdaterad av kategorier för en specifik månad

  2. Hur man ställer in psycopg2 med Google App Engine PostgreSQL-databas

  3. PostgreSQL ILIKE-fråga med SQLAlchemy

  4. Hur konverterar man oracle hierarkiska frågor till postgresql?