Amazon Redshift unterstützt ab dem 1. November 2025 nicht mehr die Erstellung neuer Python-UDFs. Wenn Sie Python-UDFs verwenden möchten, erstellen Sie die UDFs vor diesem Datum. Bestehende Python-UDFs funktionieren weiterhin wie gewohnt. Weitere Informationen finden Sie im Blog-Posting
IN-Bedingung
Eine IN-Bedingung überprüft, ob ein Wert Element aus einer Menge von Werten oder aus einer Unterabfrage ist.
Syntax
expression [ NOT ] IN (expr_list | table_subquery)
Argumente
- expression
-
Ein numerischer, Zeichen- oder Datum/Uhrzeit-Ausdruck, der anhand der Ausdrucksliste expr_list oder der Unterabfrage table_subquery ausgewertet wird, und der mit dem Datentyp der Liste bzw. Abfrage kompatibel sein muss.
- expr_list
-
Ein oder mehrere kommagetrennte Ausdrücke oder ein oder mehrere Mengen von kommagetrennten Ausdrücken, als Klammerausdruck.
- table_subquery
-
Eine Unterabfrage, die zu einer Tabelle mit einer oder mehreren Zeilen ausgewertet wird, aber höchstens eine Spalte in ihrer SELECT-Liste enthält.
- IN | NOT IN
-
In gibt „wahr“ zurück, wenn der Ausdruck Element der Ausdrucksliste oder der Abfrage ist. NOT IN gibt „wahr“ zurück, wenn der Ausdruck darin nicht enthalten ist. IN und NOT IN geben NULL und keine Zeilen zurück, wenn der Ausdruck expression zu „Null“ ausgewertet wird, oder wenn in der Ausdrucksliste expr_list bzw. der Unterabfrage table_subquery keine übereinstimmenden Werte gefunden wurden und mindestens eine der verglichenen Zeilen als Ergebnis „Null“ zurückgegeben hat.
Beispiele
Die folgenden Bedingungen sind nur für die aufgelisteten Werte wahr:
qtysold in (2, 4, 5) date.day in ('Mon', 'Tues') date.month not in ('Oct', 'Nov', 'Dec')
Optimierung bei großen IN-Listen
Um die Abfrageleistung zu optimieren, werden IN-Listen mit mehr als 10 Werten intern als Zahlenarray ausgewertet. IN-Listen mit weniger Werten werden als Reihe von OR-Prädikaten ausgewertet. Diese Optimierung wird für die Datentypen SMALLINT, INTEGER, BIGINT, REAL, DOUBLE PRECISION, BOOLEAN, CHAR, VARCHAR, DATE, TIMESTAMP und TIMESTAMPTZ unterstützt.
Den Effekt dieser Optimierung verdeutlicht die Ausgabe, wenn ein EXPLAIN über der Abfrage ausgeführt wird. Zum Beispiel:
explain select * from sales QUERY PLAN -------------------------------------------------------------------- XN Seq Scan on sales (cost=0.00..6035.96 rows=86228 width=53) Filter: (salesid = ANY ('{1,2,3,4,5,6,7,8,9,10,11}'::integer[])) (2 rows)