Ich verwende Postgres 9.4 und den Jsonb-Typ. Ich habe die folgende Tabelle:Array-Objekt als Teil der WHERE-Klausel überprüfen
CREATE TABLE jsonb_test (iid serial NOT NULL, data jsonb)
und die folgenden JSON-Daten in dieser Tabelle:
{"date": "2016-01-01T00:00:00.000Z", "items": [{"name": "bottles", "price": 12}, {"name": "caps", "price": 20}], "customer": {"name": "Customer 1", "email": "[email protected]"}}
{"date": "2015-12-01T00:00:00.000Z", "items": [{"name": "bottles", "price": 1}, {"name": "caps", "price": 50}], "customer": {"name": "Customer 2", "email": "[email protected]"}}
Was würde ich zu tun ist, alle Zeilen zu erhalten, die ein Element mit einem Preis hat mehr als 30 In diesem Fall würde das die Zeile "Kunde 2" zurückgeben.
Das ist meine Abfrage so weit:
SELECT * FROM jsonb_test WHERE jsonb_array_elements(jsonb_extract_path(data, 'items')) #> '{price}' > '0'
Aber das schlägt mit dem Fehler ERROR: argument of WHERE must not return a set
Kann mir jemand sagen, wie dies zu tun? Ist es möglich, dies für eine beliebige Verschachtelungsebene zu tun?
Danke!
Haben Sie lesen [? Warum kann ich nicht direkt auf jsonb_array_elements abfragen] (http://stackoverflow.com/questions/30687945/why-cant-i-query-directly -on-jsonb-array-elements) – abarisone
@abarisone Das habe ich gesehen, was mir nicht klar war, wie man mehr als/weniger als Operationen macht. – shortspider