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

cara memilih semua catatan yang berisi nilai-nilai tertentu dari bidang json postgres berisi array

Gunakan ANY untuk menguji apakah larik jsonb berisi apa saja dari nilai yang tepat, yang dapat berupa larik atau subkueri, menggunakan contoh sqlfiddle Anda

SELECT *
FROM tableA
WHERE (data->'sequence') @> ANY(SELECT (data_id::TEXT)::JSONB FROM tableB)

Anda juga dapat melewatkan literal array, dalam hal ini akan memerlukan array nilai JSONB, yaitu sisi kanan @> dapat diganti dengan ANY('{123,456}'::JSONB[]) literal

Atau, Gunakan && untuk menguji tumpang tindih array. Pertama-tama perlu untuk mengonversi larik JSON/JSONB ke larik asli

SELECT tableA.*
FROM tableA 
JOIN LATERAL (
  SELECT ARRAY_AGG(v::INT) y 
  FROM JSONB_ARRAY_ELEMENTS_TEXT(data->'sequence') v
) x ON TRUE
WHERE x.y && '{123, 456}'

Anda juga dapat mengganti array literal '{123, 456}' dengan subkueri yang mengembalikan larik bilangan bulat, seperti (SELECT ARRAY_AGG(data_id) FROM tableB)

Pilihan lain adalah menggunakan atau di klausa where Anda

select *
from tableA 
where (data->'sequence') @> '[456]'
   or (data->'sequence') @> '[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. Izin PostgreSQL terbatas untuk aplikasi web

  2. Menentukan OID tabel di Postgres 9.1?

  3. Ubah nama kolom tabel menjadi huruf besar di postgres

  4. Bagaimana cara memasukkan nilai tabel dari dua array di Postgres?

  5. Bagaimana cara melakukan pencadangan dari Postgresql-DB melalui JDBC?