IN-Bedingung - Amazon Redshift

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)