sql >> Base de Datos >  >> RDS >> PostgreSQL

El operador no existe:entero =entero[] en una consulta con ANY

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 .

Nota: que se ve el mismo comportamiento cuando se usa IN en lugar de = ANY .