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

Hvorfor kan jeg ikke forespørge direkte på jsonb_array_elements?

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.




  1. Oracle JDBC intermitterende forbindelsesproblem

  2. Dynamisk rullemenu for forskellige lande, stater, geografiske placeringer?

  3. Tilføjelse af flere kolonner EFTER en specifik kolonne i MySQL

  4. Automatisk db-forbindelse tæt i php?