PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

O operador não existe:integer =integer[] em uma consulta com ANY


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 .