Basierend auf dem Teil der Fehlermeldung operator does not exist: integer = integer[]
, scheint es, dass bs
Spalte muss unnest
sein ed, um die rechte Seite zurück zu einer integer
zu bekommen so kann der Vergleichsoperator gefunden werden:
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);
Dies ergibt die Ausgabe:
A
2
3
Angesichts der Dokumentation für die JEDE Funktion :
... der Fehler macht Sinn, da der linke Ausdruck ein integer
ist -- Spalte b
-- während der rechte Ausdruck ein Array von integer
ist s oder integer[]
, und so hat der Vergleich am Ende die Form integer
=integer[]
, die keinen Operator hat und daher zu dem Fehler führt.
unnest
ing der integer[]
value macht die linken und rechten Ausdrücke zu integer
s, und so kann der Vergleich fortgesetzt werden.
Geänderte SQL Fiddle .
Hinweis: dass das gleiche Verhalten bei Verwendung von IN
auftritt statt = ANY
.