Mit Query nach JSON-Werten abfragen

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 :wink:

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)

hey, ich glaub ich hab hier einen Genius gegenüber, danke!

s/Genius/Partner?/ :wink: