Com base na parte da mensagem de erro
operator does not exist: integer = integer[]
, parece que o bs
a coluna precisa ser unnest
ed, a fim de obter o lado direito de volta para um integer
então o operador de comparação pode ser encontrado: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);
Isso resulta na saída:
A
2
3
Dado o documento para a função ANY :
... o erro faz sentido, pois a expressão da esquerda é um
integer
-- coluna b
-- enquanto a expressão da direita é um array de integer
s, ou integer[]
, e assim a comparação acaba ficando no formato integer
=integer[]
, que não tem um operador e, portanto, resulta no erro. unnest
ndo o integer[]
value torna as expressões da mão esquerda e direita integer
s, e assim a comparação pode continuar. Modificado SQL Fiddle .
Observação: que o mesmo comportamento é visto ao usar
IN
em vez de = ANY
.