sql >> Database >  >> RDS >> PostgreSQL

Gegevens opvragen binnen JSON-arraygegevensveld

json_array_elements(...) geeft een set terug, en dat geldt ook voor het resultaat van het toepassen van ->> en = naar het stel. Let op:

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

Je zou verwachten dat je gewoon '123' = ANY (...) . kunt schrijven maar dat wordt helaas niet ondersteund zonder een array-invoer. Verrassend genoeg is dat ook niet '123' IN (...) , iets wat ik denk dat we moeten oplossen.

Dus ik zou LATERAL . gebruiken . Hier is een manier waarop een bedrijfs-ID meerdere keren wordt geretourneerd als deze meerdere overeenkomsten heeft:

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. MYsql 5.6 geheugencache gebruiken

  2. MySQL Linker Join + Min

  3. n-percentielberekeningen in postgresql

  4. Standaardschema in Oracle-verbindings-URL