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

Dlaczego nie mogę wysyłać zapytań bezpośrednio do jsonb_array_elements?

Jak mówi komunikat o błędzie, argumenty do WHERE nie może zwrócić zestawu. jsonb_array_elements zwraca zestaw i nie można go porównać z pojedynczą wartością. W drugim zapytaniu masz sprzężenie krzyżowe wewnątrz zaznaczenia, które konwertuje je na odpowiedni wynik do użycia WHERE wł.

Możesz to również zrobić w ten sposób

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

Tutaj podwybór pozwoli ci użyć IN operatora, aby znaleźć żądaną wartość, ponieważ wynik nie jest już zestawem.

Innym sposobem jest bezpośrednie zapytanie jsonb

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

W ten sposób nie musisz konwertować jsonb na zestaw wyników i przeszukiwać go.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. java.lang.ClassNotFoundException:org.postgresql.Driver, Android

  2. Funkcja miesięcy między dwiema datami

  3. Przyszłość Postgres-XL

  4. Nie można połączyć postgreSQL z psycopg2

  5. Zwróć zero, jeśli nie znaleziono żadnego rekordu