sql >> Database teknologi >  >> RDS >> PostgreSQL

Forespørger om data i JSON-array-datafeltet

json_array_elements(...) returnerer et sæt, og det samme gør resultatet af at anvende ->> og = til sættet. Bemærk:

regress=> select json_array_elements('[{"name": "foo", "account_id": "123"}, {"name": "bar", "account_id": "321"}]') ->> 'account_id' = '123';
 ?column? 
----------
 t
 f
(2 rows)

Du ville forvente bare at kunne skrive '123' =ENHVER (...) men det understøttes ikke uden et array-input, desværre. Overraskende nok er '123' IN (...) heller ikke , noget jeg tror, ​​vi bliver nødt til at ordne.

Så jeg ville bruge LATERAL . Her er en måde, som returnerer et virksomheds-id flere gange, hvis det har flere matches:

CREATE TABLE company AS SELECT 1 AS id, '[{"name": "foo", "account_id": "123"}, {"name": "bar", "account_id": "321"}]'::json AS accounts;

SELECT id 
FROM company c,
LATERAL json_array_elements(c.accounts) acc 
WHERE acc ->> 'account_id' = '123';



  1. Sådan implementeres Percona XtraDB Cluster 8 for høj tilgængelighed

  2. Sådan bruger du KNN Machine Learning Model med 2UDA – PostgreSQL og Orange (del 1)

  3. Hvordan kan du tvinge en funktion i en where-klausul til at udføre én gang i oracle?

  4. Sådan finder du UTF-8-tegn i en Latin1-kodet kolonne - MySQL