PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Warum kann ich jsonb_array_elements nicht direkt abfragen?

Wie die Fehlermeldung sagt, Argumente für WHERE darf keinen Satz zurückgeben. jsonb_array_elements gibt eine Menge zurück und kann nicht mit einem einzelnen Wert verglichen werden. In der zweiten Abfrage haben Sie einen Cross Join innerhalb der Auswahl, der sie in ein geeignetes Ergebnis umwandelt, um WHERE zu verwenden ein.

Sie können es auch so machen

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

Hier erlaubt Ihnen die Unterauswahl, den IN zu verwenden Operator, um den gewünschten Wert zu finden, da das Ergebnis keine Menge mehr ist.

Eine andere Möglichkeit besteht darin, die jsonb direkt abzufragen

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

Auf diese Weise müssen Sie die jsonb nicht in eine Ergebnismenge konvertieren und darin suchen.