sql >> Databáze >  >> RDS >> PostgreSQL

Dotazování dat v datovém poli pole JSON

json_array_elements(...) vrátí sadu a stejně tak i výsledek použití ->> a = do sady. Všimněte si:

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

Očekávali byste, že budete schopni napsat pouze '123' = ANY (...) ale to bohužel není podporováno bez vstupu pole. Překvapivě není ani '123' IN (...) , něco, co si myslím, že budeme muset opravit.

Takže bych použil LATERAL . Zde je jeden způsob, který vrátí ID společnosti vícekrát, pokud má více shod:

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. Časy exportu dat MySQL se mění

  2. návrh struktury tabulky mysql?

  3. Průvodce datovým modelem entity získá výjimku při pokusu o přidání nového připojení Oracle

  4. Mazání dynamicky spravovaných tabulek v MySQL