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

Operator nie istnieje:integer =integer[] w zapytaniu z ANY

Na podstawie komunikatu o błędzie część operator does not exist: integer = integer[] , wygląda na to, że bs kolumna musi być unnest ed, aby przywrócić prawą stronę z powrotem do integer więc operator porównania można znaleźć:

WITH bar AS (
  SELECT array_agg(b) AS bs
  FROM foo
  WHERE c < 3
)
SELECT a
FROM foo
WHERE b = ANY ( SELECT unnest(bs) FROM bar);

Daje to wynik:

A
2
3

Biorąc pod uwagę dokument dla ANY :

... błąd ma sens, ponieważ wyrażenie po lewej stronie to integer -- kolumna b -- podczas gdy wyrażenie po prawej stronie jest tablicą integer s lub integer[] , więc porównanie kończy się w postaci integer =integer[] , który nie ma operatora i dlatego powoduje błąd.

unnest ing integer[] wartość sprawia, że ​​wyrażenia lewe i prawe są integer s, więc porównanie może być kontynuowane.

Zmodyfikowane SQL Fiddle .

Uwaga: że to samo zachowanie jest widoczne przy użyciu IN zamiast = ANY .



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Zapytanie PostgreSQL o listę dozwolonych wartości w ograniczeniu?

  2. Przejście danych H2 do PostgreSQL

  3. Jak uporządkować dane w sqlalchemy według listy

  4. Jak mogę uzyskać funkcję okna Redshift/Postgresql LAG, aby selektywnie wykluczać rekordy?

  5. Jak zminimalizować RPO dla baz danych PostgreSQL za pomocą odzyskiwania punktu w czasie?