PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Operator existiert nicht:integer =integer[] in einer Abfrage mit ANY

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 .