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
.