PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

L'opérateur n'existe pas :entier =entier[] dans une requête avec ANY

Basé sur la partie du message d'erreur operator does not exist: integer = integer[] , il apparaît que le bs la colonne doit être unnest ed, afin de ramener le côté droit à un integer afin que l'opérateur de comparaison puisse être trouvé :

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);

Cela se traduit par la sortie :

A
2
3

Étant donné la doc pour la fonction ANY :

... l'erreur est logique, car l'expression de gauche est un integer -- colonne b -- tandis que l'expression de droite est un tableau d'integer s, ou integer[] , et donc la comparaison finit par être de la forme integer =integer[] , qui n'a pas d'opérateur, et génère donc l'erreur.

unnest l'integer[] value rend les expressions de gauche et de droite integer s, et ainsi la comparaison peut continuer.

SQL Fiddle modifié .

Remarque : que le même comportement est observé lors de l'utilisation de IN au lieu de = ANY .