PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Запитване на данни в полето с данни на масив JSON

json_array_elements(...) връща набор, както и резултатът от прилагането на ->> и = към комплекта. Спазвайте:

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

Очаквате просто да можете да напишете '123' = ANY (...) но това не се поддържа без въвеждане на масив, за съжаление. Изненадващо, нито '123' IN (...) , нещо, което мисля, че ще трябва да поправим.

Така че бих използвал LATERAL . Ето един начин, който ще върне ИД на фирма многократно, ако има множество съвпадения:

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Postgresql -- почистване на HTML тагове в средата на низа

  2. Как да покажа всички невалидни обекти в PostgresQL

  3. Колко различен е PostgreSQL от MySQL?

  4. Извършване на WHERE IN на множество колони в Postgresql

  5. Вземете времето за изпълнение на заявката PostgreSQL