PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Cara mendapatkan elemen dari array Json di PostgreSQL

Saya tidak yakin Anda memiliki json[] (Array PostgreSQL dari json nilai) kolom yang diketik, atau json kolom yang diketik, yang tampaknya merupakan larik JSON (seperti dalam contoh Anda).

Apa pun kasusnya, Anda perlu memperluas array Anda sebelum melakukan kueri. Dalam kasus json[] , Anda perlu menggunakan unnest(anyarray) ; dalam kasus array JSON dalam json kolom yang diketik, Anda perlu menggunakan json_array_elements(json) (dan LATERAL bergabung -- mereka tersirat dalam contoh saya):

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

Sayangnya, Anda tidak dapat menggunakan indeks apa pun dengan data Anda. Anda harus memperbaiki skema Anda terlebih dahulu, untuk melakukannya.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cari tahu apakah pengguna mendapat izin untuk memilih/memperbarui/... tabel/fungsi/... di PostgreSQL

  2. Bagaimana cara memeriksa apakah skema publik PostgreSQL ada?

  3. psql perintah tidak valid \N saat memulihkan sql

  4. Jatuhkan database yang sedang diakses oleh pengguna lain?

  5. Temukan artikel di mana array