Zum Inhalt springen

IN-Operator

Der Operator IN prüft, ob der linke Ausdruck in der Sammlung auf der rechten Seite (RHS) enthalten ist. Unterstützte Sammlungen auf der RHS sind Tupel, Listen und Maps sowie Unterabfragen, die eine einzelne Spalte zurückgeben. Die Einschränkung auf eine Spalte gilt nur für Unterabfragen; Tupel, Listen und Maps dürfen selbst zusammengesetzte Werte enthalten.

IN (val1, val2, ...) (Tupel)

Der Operator IN auf einem Tupel (val1, val2, ...) liefert true, wenn der Ausdruck in der RHS vorkommt, false, wenn der Ausdruck nicht in der RHS vorkommt und die RHS keine NULL-Werte hat, oder NULL, wenn der Ausdruck nicht in der RHS vorkommt und die RHS NULL-Werte hat.

SELECT 'Math' IN ('CS', 'Math');
true
SELECT 'English' IN ('CS', 'Math');
false
SELECT 'Math' IN ('CS', 'Math', NULL);
true
SELECT 'English' IN ('CS', 'Math', NULL);
NULL

IN [val1, val2, ...] (Liste)

Der Operator IN arbeitet auf Listen nach der in Python verwendeten Semantik. Anders als beim Operator IN auf Tupeln ändert das Vorhandensein von NULL-Werten auf der rechten Seite das Ergebnis nicht:

SELECT 'Math' IN ['CS', 'Math', NULL];
true
SELECT 'English' IN ['CS', 'Math', NULL];
false

IN Map

Der Operator IN arbeitet auf Maps nach der in Python verwendeten Semantik, d. h., er prüft das Vorhandensein von Schlüsseln (nicht von Werten):

SELECT 'key1' IN MAP {'key1': 50, 'key2': 75};
true
SELECT 'key3' IN MAP {'key1': 50, 'key2': 75};
false

IN Unterabfrage

Der Operator IN arbeitet mit Unterabfragen, die eine einzelne Spalte zurückgeben. Zum Beispiel:

SELECT 42 IN (SELECT unnest([32, 42, 52]) AS x);
true

Gibt die Unterabfrage mehr als eine Spalte zurück, wird ein Binder-Fehler geworfen:

SELECT 42 IN (SELECT unnest([32, 42, 52]) AS x, 'a' AS y);
Terminal window
Binder Error:
Subquery returns 2 columns - expected 1

IN Zeichenkette

Der Operator IN kann als Kurzform für die Zeichenkettenfunktion contains verwendet werden. Zum Beispiel:

SELECT 'Hello' IN 'Hello World';
true

NOT IN

NOT IN kann verwendet werden, um zu prüfen, ob ein Element nicht in der Menge vorkommt. x NOT IN y ist gleichwertig mit NOT (x IN y).