Na podstawie komunikatu o błędzie część operator does not exist: integer = integer[]
, wygląda na to, że bs
kolumna musi być unnest
ed, aby przywrócić prawą stronę z powrotem do integer
więc operator porównania można znaleźć:
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);
Daje to wynik:
A
2
3
Biorąc pod uwagę dokument dla ANY :
... błąd ma sens, ponieważ wyrażenie po lewej stronie to integer
-- kolumna b
-- podczas gdy wyrażenie po prawej stronie jest tablicą integer
s lub integer[]
, więc porównanie kończy się w postaci integer
=integer[]
, który nie ma operatora i dlatego powoduje błąd.
unnest
ing integer[]
wartość sprawia, że wyrażenia lewe i prawe są integer
s, więc porównanie może być kontynuowane.
Zmodyfikowane SQL Fiddle .
Uwaga: że to samo zachowanie jest widoczne przy użyciu IN
zamiast = ANY
.