PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Jak pobrać elementy z tablicy Json w PostgreSQL

Nie jestem pewien, czy masz json[] (tablica PostgreSQL z json wartości) wpisana kolumna lub json wpisana kolumna, która wydaje się być tablicą JSON (jak w twoim przykładzie).

Tak czy inaczej, przed wysłaniem zapytania musisz rozszerzyć swoją tablicę. W przypadku json[] , musisz użyć unnest(anyarray) ; w przypadku tablic JSON w json wpisaną kolumnę, musisz użyć json_array_elements(json) (i LATERAL złączenia — są domniemane w moich przykładach):

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

Niestety nie możesz używać żadnego indeksu ze swoimi danymi. Aby to zrobić, musisz najpierw naprawić schemat.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Czy mogę dynamicznie obcinać tabele?

  2. podzapytanie w FROM musi mieć alias

  3. Integracja postgreSQL na WAMP

  4. Jak przekonwertować tekst punktowy na geometrię

  5. PostgreSQL INSERT ON CONFLICT UPDATE (upsert) użyj wszystkich wykluczonych wartości