メニュー
Amazon Redshift
データベース開発者ガイド (API Version 2012年12月1日)

IN 条件

IN 条件は、一連の値の中に、またはサブクエリ内にあるメンバーシップの値をテストします。

構文

Copy
expression [ NOT ] IN (expr_list | table_subquery)

引数

expression

expr_list または table_subquery に対して評価される数値、文字、または日時であり、当該リストまたはサブクエリのデータ型との互換性が必要です。

expr_list

1 つまたは複数のカンマ区切り式、あるいは括弧で囲まれたカンマ区切り式の 1 つまたは複数のセット。

table_subquery

評価結果として 1 つまたは複数の行を持つテーブルを返すサブクエリですが、その選択リスト内の列数は 1 個に制限されています。

IN | NOT IN

IN は、式が式リストまたはクエリのメンバーである場合に true を返します。NOT IN は、式がメンバーでない場合に true を返します。IN と NOT IN は、次の場合には NULL を返し、行は返されません。それは、expression で Null がもたらされる場合、または、一致する expr_list 値または table_subquery 値がなく、これらの比較行の少なくとも 1 つで Null がもたらされる場合です。

次の条件は、リストされた値の場合にのみ true を返します。

Copy
qtysold in (2, 4, 5) date.day in ('Mon', 'Tues') date.month not in ('Oct', 'Nov', 'Dec')

大規模 IN リストの最適化

クエリのパフォーマンスを最適化するために、10 個を超える値が含まれる IN リストは内部的にスカラー配列として評価されます。10 個未満の値が含まれる IN リストは一連の OR 述語として評価されます。この最適化は、DECIMAL を除くすべてのデータ型に対してサポートされています。

この最適化の効果を確認するには、クエリの EXPLAIN 出力を調べてください。(例:

Copy
explain select * from sales where salesid in (1,2,3,4,5,6,7,8,9,10,11); 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)