PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

L'operatore non esiste:intero =intero[] in una query con ANY

In base alla parte del messaggio di errore operator does not exist: integer = integer[] , sembra che il bs la colonna deve essere unnest ed, per riportare il lato destro a un integer quindi è possibile trovare l'operatore di confronto:

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);

Ciò si traduce nell'output:

A
2
3

Dato il documento per la funzione ANY :

... l'errore ha senso, poiché l'espressione a sinistra è un integer -- colonna b -- mentre l'espressione di destra è un array di integer s o integer[] , e quindi il confronto finisce per essere nella forma integer =integer[] , che non ha un operatore e quindi genera l'errore.

unnest inserendo il integer[] value rende le espressioni di sinistra e di destra integer s, e così il confronto può continuare.

Modificato SQL Fiddle .

Nota: che lo stesso comportamento si verifica quando si utilizza IN invece di = ANY .