sql >> Databasteknik >  >> RDS >> PostgreSQL

Frågar efter data inom JSON-matrisens datafält

json_array_elements(...) returnerar en uppsättning, och det gör också resultatet av att tillämpa ->> och = till uppsättningen. Observera:

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

Du förväntar dig att bara kunna skriva '123' = ANY (...) men det stöds inte utan en arrayingång, tyvärr. Överraskande nog är inte '123' IN (...) heller , något jag tror att vi måste fixa.

Så jag skulle använda LATERAL . Här är ett sätt som returnerar ett företags-ID flera gånger om det har flera matchningar:

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. Finns det en Oracle som motsvarar SQL Servers OUTPUT INSERTED.*?

  2. MySQL – MariaDB – Skriver den allra första lagrade proceduren

  3. MySQL främmande nyckel vid radering

  4. Hur returnerar jag heltal och numeriska kolumner från MySQL som heltal och numeriska i PHP?