カテゴリ:

条件式関数

[ NOT ] IN

引数が明示的リストのメンバーの1つであるか、サブクエリの結果であるかをテストします。

注釈

サブクエリ形式では、 IN は = ANY と同等で、 NOT IN は <> ALL と同等です。

構文

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

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

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

使用上の注意

  • ほとんどのコンテキストと同様に、 NULL は NULL と同等ではありません。<value> が NULLの場合、リストまたはサブクエリに NULLが含まれているかどうかにかかわらず、関数の戻り値は NULLです。

照合の詳細

Arguments with collation specifications are currently not supported.

次の例は、リテラルで IN を使用する方法を示しています。

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 を使用する方法を示しています。

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 |
+-------+-------+-------+

NULL != NULLです。以下は、 NULL がそれ自体と一致しないため、「(4、5、NULL)」がそれ自体と一致しないことを示しています。

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

これは 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 |
+-------+-------+-------+