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
.