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

jsonb LIKE query pada objek bersarang dalam array

Solusi Anda dapat disederhanakan lagi:

SELECT r.res->>'name' AS feature_name, d.name AS detail_name
FROM   restaurants r
     , jsonb_populate_recordset(null::foo, r.res #> '{payload, details}') d
WHERE  d.name LIKE '%oh%';

Atau lebih sederhana lagi, dengan jsonb_array_elements() karena Anda sebenarnya tidak memerlukan jenis baris (foo ) sama sekali dalam contoh ini:

SELECT r.res->>'name' AS feature_name, d->>'name' AS detail_name
FROM   restaurants r
     , jsonb_array_elements(r.res #> '{payload, details}') d
WHERE  d->>'name' LIKE '%oh%';

dbfiddle di sini

Tapi itu tidak apa yang Anda tanyakan tepatnya:

Anda mengembalikan semua elemen array JSON (0-n per baris tabel dasar), di mana satu kunci tertentu ('{payload,details,*,name}' ) cocok (peka huruf besar/kecil).

Dan pertanyaan awal Anda memiliki array JSON bersarang di atas ini. Anda menghapus larik luar untuk solusi ini - saya melakukan hal yang sama.

Bergantung pada kebutuhan Anda yang sebenarnya, kemampuan pencarian teks baru dari Postgres 10 semoga bermanfaat.



  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-sort array dengan kata-kata di setiap elemen

  2. Bagaimana cara mencari nilai tertentu di semua tabel (PostgreSQL)?

  3. fe_sendauth:tidak ada kesalahan yang diberikan kata sandi setelah menyiapkan database PostgreSQL di Cloud9 IDE

  4. Menghapus dari banyak-ke-banyak SQL-Alchemy dan Postgresql

  5. Bagaimana cara menyimpan file gambar pada database Postgres?