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

Meminta data dalam bidang data array JSON

json_array_elements(...) mengembalikan satu set, dan begitu juga hasil penerapan ->> dan = ke himpunan. Perhatikan:

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

Anda diharapkan hanya dapat menulis '123' = ANY (...) tapi sayangnya itu tidak didukung tanpa input array. Anehnya, tidak juga '123' IN (...) , sesuatu yang menurut saya harus kita perbaiki.

Jadi, saya akan menggunakan LATERAL . Berikut salah satu caranya, yang akan mengembalikan ID perusahaan beberapa kali jika memiliki beberapa kecocokan:

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. Pilih kolom dengan nama kolom tertentu di PostgreSQL

  2. Menyimpan properti dinamis objek dalam SQL

  3. Kumpulan koneksi menggunakan pg-promise

  4. Pertahankan zona waktu dalam jenis stempel waktu PostgreSQL

  5. psql setel statement_timeout default sebagai pengguna di postgres