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

Bagaimana cara mendapatkan elemen dengan nomor unik dari array json di PostgreSQL?

Coba pendekatan yang berbeda dan bersih dengan JOIN LATERAL :

select b.id, t.rn
     , t.account->>'name' AS name
     , t.account->>'balance' AS balance
FROM   bank_accounts b
LEFT   JOIN LATERAL jsonb_array_elements(b.bank_accounts)
                    WITH ORDINALITY AS t (account, rn) ON true;

Jika Anda tidak peduli dengan baris dengan nilai kosong atau nol di bank_accounts , gunakan CROSS JOIN yang lebih sederhana :

select b.id, t.rn
     , t.account->>'name' AS name
     , t.account->>'balance' AS balance
FROM   bank_accounts b
     , jsonb_array_elements(b.bank_accounts) WITH ORDINALITY AS t (account, rn);

Elemen kunci untuk masalah Anda adalah WITH ORDINALITY yang menghasilkan nomor baris dengan cepat untuk fungsi set-return. Itu diperkenalkan dengan Postgres 9.4 - bekerja untuk Anda, jsonb juga diperkenalkan dengan 9.4.

Itu unik per baris yang mendasarinya. Agar unik di seluruh tabel, tambahkan id dari tabel yang mendasarinya.

Detail untuk WITH ORDINALITY :

Terkait:




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Symfony3 menyimpan setiap pembaruan ke dalam basis data

  2. PostgreSQL untuk menemukan titik tengah antara dua cap waktu

  3. Masalah SQLite3 dan Postgres/Heroku Ruby on Rails

  4. PGSQL tidak dimuat di PHP 5.3 Windows di bawah IIS

  5. Grup Pengguna PostgreSQL NL