Kategorien:

Funktionen für bedingte Ausdrücke

[ NOT ] IN

Prüft, ob das Argument auf einer expliziten Liste steht oder das Ergebnis einer Subquery ist oder nicht.

Bemerkung

In der Unterabfrageform ist IN gleich = ANY und NOT IN gleich <> ALL.

Syntax

<value> [ NOT ] IN ( <value1> , <value2> , ... )

<value> [ NOT ] IN ( ( <value1> , <value2> , ... ) , ( <value3> , <value4> , ... ) )

<value> [ NOT ] IN ( <subquery> )

Nutzungshinweise

  • Wie in den meisten Kontexten ist NULL nicht gleich NULL. Wenn <Wert> NULL ist, lautet der Rückgabewert der Funktion NULL, unabhängig davon, ob die Liste oder Unterabfrage NULL enthält.

Sortierungsdetails

Arguments with collation specifications are currently not supported.

Beispiele

Die folgenden Beispiele veranschaulichen die Verwendung von IN in Literalen.

SELECT
    CASE
        WHEN 1 IN (1, 2, 3)
        THEN 'true'
        ELSE 'false'
    END AS RESULT;
+--------+
| RESULT |
|--------|
| true   |
+--------+
SELECT
    CASE
        WHEN 'a' NOT IN (SELECT column1 FROM VALUES ('b'), ('c'), ('d'))
        THEN 'true'
        ELSE 'false'
    END AS RESULT;
+--------+
| RESULT |
|--------|
| true   |
+--------+

In diesem Beispiel wird die Verwendung von IN mit einer Tabelle veranschaulicht:

CREATE TABLE MyTable (col_1 INTEGER, col_2 INTEGER, col_3 INTEGER);
INSERT INTO MyTable (col_1, col_2, col_3) VALUES
    (1, 1, 1),
    (1, 2, 3),
    (4, 5, NULL);
SELECT *
    FROM MYTABLE
    WHERE (col_1, col_2, col_3) IN ((1,2,3),(4,5,6));
+-------+-------+-------+
| COL_1 | COL_2 | COL_3 |
|-------+-------+-------|
|     1 |     2 |     3 |
+-------+-------+-------+

Denken Sie daran, dass NULL != NULL. Folgendes Beispiel zeigt, dass „(4, 5, NULL)“ nicht mit sich selbst übereinstimmt, weil NULL nicht mit sich selbst übereinstimmt:

SELECT *
    FROM MYTABLE
    WHERE (col_1, col_2, col_3) IN ((9, 8, 7), (4, 5, NULL));
+-------+-------+-------+
| COL_1 | COL_2 | COL_3 |
|-------+-------+-------|
+-------+-------+-------+

Hier ist ein einfaches Beispiel für die Verwendung von NOT IN:

SELECT *
    FROM MYTABLE
    WHERE (col_1, col_2, col_3) NOT IN ((1, 1, 1), (2, 2, 2));
+-------+-------+-------+
| COL_1 | COL_2 | COL_3 |
|-------+-------+-------|
|     1 |     2 |     3 |
|     4 |     5 |  NULL |
+-------+-------+-------+