rhaupt
1
Ich habe folgende simple Beispiel-Tabelle ‘json_table’:
id | data(json)
1 | {“a”: 1}
2 | {“a”: 1, “b”: 2}
3 | {“a”: 2}
4 | {“c”: 1}
Beispielsweise so
SELECT * FROM json_table WHERE data ? ‘a’
kann ich Queries formulieren, womit ich nach JSON-Keys suchen kann.
Nun möchte ich aber alle Datensätze haben, die JSON-Keys mit einen Wert/Value ‘2’ haben. Also folgendes Resultat soll herauskommen:
2 | {“a”: 1, “b”: 2}
3 | {“a”: 2}
Bekomme ich das mit einer ‘einfachen’ Abfrage bewerkstelligt oder wäre dafür doch eine mehrzeilige Funktion notwendig?
Danke, Rainer
yeah
Das json ist für uns alle Neuland.
test=*# select * from rhaupt ;
id | val
----+------------------
1 | {"a": 1}
2 | {"a": 1, "b": 2}
3 | {"a": 2}
4 | {"c": 1}
(4 rows)
Time: 0,197 ms
test=*# select *, (r).* from (select id, val,jsonb_each_text(val) r from rhaupt ) x where (r).value = '2';
id | val | r | key | value
----+------------------+-------+-----+-------
2 | {"a": 1, "b": 2} | (b,2) | b | 2
3 | {"a": 2} | (a,2) | a | 2
(2 rows)
test=*# select * from (select id, jsonb_each_text(val) r from rhaupt ) x where (r).value = '2';
id | r
----+-------
2 | (b,2)
3 | (a,2)
(2 rows)
rhaupt
3
hey, ich glaub ich hab hier einen Genius gegenüber, danke!