2017-03-03 2 views
1
CREATE TABLE tableTestJSON (
    id serial primary key, 
    data jsonb 
); 

INSERT INTO tableTestJSON (data) VALUES 
('{}'), 
('{"a": 1}'), 
('{"a": 2, "b": ["c", "d"]}'), 
('{"a": 1, "b": {"c": "d", "e": true}}'), 
('{"b": 2}'); 

Ich kann die Werte auswählen. Das ist kein Problem.AbfragenJSON PostgreSQL

SELECT * FROM tableTestJSON; 

Ich kann testen, dass zwei JSON-Objekte identisch sind diese Abfrage.

SELECT * FROM tableTestJSON WHERE data = '{"a":1}'; 

Diese Abfrage der Ausgabe lautet:

id | Daten ---- + ------ 1 | { "A": 1} (1 row)

Aber ich habe ein Problem: Lets sagen, ich habe eine Spalte:

{a: 30} 
{a: 40} 
{a: 50} 

In diesem Fall, wie kann ich Abfrage für alle Elemente enthalten, a = 30 oder a = 40. Ich konnte keine Lösung für 'oder' finden, z

select * from table where a in (10,20); // ?? 

oder Wie kann ich auf einem solchen Zustand abfragen?

Antwort

1

einen Wert eines Objekts json Extract the operator ->> Verwendung:

select * 
from tabletestjson 
where (data->>'a')::int in (1, 2) 

id |     data     
----+-------------------------------------- 
    2 | {"a": 1} 
    3 | {"a": 2, "b": ["c", "d"]} 
    4 | {"a": 1, "b": {"c": "d", "e": true}} 
(3 rows) 
+0

Zusätzlich Test I die eine andere asnwer wie diese. Wie diese Abfrage: SELECT * FROM tableTestJSON WHERE Daten #> '{a}' IN ('10', '20'); Dank. – aemre