Según la parte del mensaje de error, el operador operator does not exist: integer = integer[]
, parece que bs
la columna debe ser unnest
ed, para que el lado derecho vuelva a ser un integer
por lo que se puede encontrar el operador de comparación:
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);
Esto da como resultado la salida:
A
2
3
Dado el documento para CUALQUIER función :
... el error tiene sentido, ya que la expresión de la izquierda es un integer
-- columna b
-- mientras que la expresión de la derecha es una matriz de integer
s, o integer[]
, por lo que la comparación termina siendo de la forma integer
=integer[]
, que no tiene un operador y, por lo tanto, genera el error.
unnest
ing el integer[]
value hace que las expresiones de la mano izquierda y derecha sean integer
s, y así la comparación puede continuar.
Modificado SQL Fiddle .
IN
en lugar de = ANY
.