PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

jak wybrać wszystkie rekordy zawierające określone wartości z pola postgres json zawierającego tablicę

Użyj ANY aby sprawdzić, czy tablica jsonb zawiera any właściwych wartości, które mogą być tablicą lub podzapytaniem, przy użyciu przykładu sqlfiddle

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

Możesz także przekazać literał tablicy, w tym przypadku wymagałoby to tablicy wartości JSONB, czyli prawej strony @> można zastąpić literałem ANY('{123,456}'::JSONB[])

Alternatywnie użyj && aby przetestować nakładanie się tablic. Najpierw należy przekonwertować tablicę JSON/JSONB na tablicę natywną

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}'

Możesz również zastąpić literał tablicy '{123, 456}' z podzapytaniem, które zwraca tablicę liczb całkowitych, np. (SELECT ARRAY_AGG(data_id) FROM tableB)

Inną opcją byłoby użycie lub w klauzuli where

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. Jak połączyć kontenery dockera podczas kompilacji?

  2. Czy usługa PostgreSQL w klastrze OpenShift może odbierać ruch zewnętrzny przez ujawnioną trasę?

  3. Zrozumienie indeksów bitmapowych w postgresql

  4. Jak dodać kolumnę w tabeli za pomocą migracji laravel 5 bez utraty jej danych?

  5. Jak sprawdzić, czy wiersz istnieje w procedurze składowanej PostgreSQL?