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

Mengapa saya tidak dapat menanyakan langsung pada jsonb_array_elements?

Seperti yang dikatakan pesan kesalahan, argumen ke WHERE tidak harus mengembalikan satu set. jsonb_array_elements mengembalikan satu set dan tidak dapat dibandingkan dengan satu nilai. Dalam kueri kedua Anda memiliki gabungan silang di dalam pilih dan yang mengubahnya menjadi hasil yang sesuai untuk menggunakan WHERE aktif.

Anda juga bisa melakukannya dengan cara ini

SELECT mydata.pk FROM mydata
  WHERE 'Bob' in (SELECT jsonb_array_elements(mydata.data->'people')->>'name');

Di sini subselect akan memungkinkan Anda untuk menggunakan IN operator untuk menemukan nilai yang diinginkan karena hasilnya bukan lagi himpunan.

Cara lain adalah dengan menanyakan jsonb secara langsung

SELECT mydata.pk FROM mydata
  WHERE mydata.data->'people' @> '[{"name":"Bob"}]'::jsonb;

Dengan cara ini Anda tidak perlu mengonversi jsonb menjadi kumpulan hasil dan mencari di dalamnya.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana cara memasukkan hasil nol / 0 dalam COUNT agregat?

  2. Indeks multi-kolom unik Postgres untuk tabel gabungan

  3. Perintah meta di Psycopg2 - \d tidak berfungsi

  4. Dapatkan nilai Kolom dari baris sebelumnya di postgres tidak dapat menggunakan fungsi jendela di UPDATE

  5. Menggabungkan jsonArrayAgg untuk mengosongkan array di jOOQ