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

Как да получите елементи от Json масив в PostgreSQL

Не съм сигурен, че имате json[] (PostgreSQL масив от json стойности) въведена колона или json въведена колона, която изглежда като JSON масив (както във вашия пример).

И в двата случая трябва да разширите своя масив, преди да направите заявка. В случай на json[] , трябва да използвате unnest(anyarray) ; в случай на JSON масиви в json въведена колона, трябва да използвате json_array_elements(json) LATERAL се присъединява -- те се подразбират в моите примери):

select     t.id,
           each_section ->> 'name' section_name,
           each_attribute ->> 'attrkey3' attrkey3
from       t
cross join unnest(array_of_json) each_section
cross join json_array_elements(each_section -> 'attributes') each_attribute
where      (each_attribute -> 'attrkey3') is not null; 
-- use "where each_attribute ? 'attrkey3'" in case of jsonb


select     t.id,
           each_section ->> 'name' section_name,
           each_attribute ->> 'attrkey3' attrkey3
from       t
cross join json_array_elements(json_array) each_section
cross join json_array_elements(each_section -> 'attributes') each_attribute
where      (each_attribute -> 'attrkey3') is not null;

SQLFiddle

За съжаление не можете да използвате никакъв индекс с вашите данни. Първо трябва да поправите схемата си, за да направите това.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Валидиране на уникалност в база данни, когато валидирането има условие

  2. Как мога да изпратя някаква http заявка от postgresql функция или тригер

  3. Как Div() работи в PostgreSQL

  4. Как да открием заявка, която държи заключването в Postgres?

  5. Как да инсталирате PostgreSQL на macOS