Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.
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. NOTIN gibt true zurück, wenn der Ausdruck kein Element ist. IN und NOT IN geben zurück NULL und in den folgenden Fällen werden keine Zeilen zurückgegeben: Wenn Ausdruck Null ergibt; oder wenn es keine passenden Werte für expr_list oder table_subquery gibt und mindestens eine dieser Vergleichszeilen Null ergibt.
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ürSMALLINT,,,,INTEGER,BIGINT, REAL DOUBLE PRECISION BOOLEAN CHARVARCHAR, DATE und Datentypen unterstützt. TIMESTAMP TIMESTAMPTZ
Sehen Sie sich die EXPLAIN Ausgabe der Abfrage an, um die Auswirkungen dieser Optimierung zu sehen. Beispielsweise:
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)