IN 條件 - Amazon Redshift

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

IN 條件

IN 條件會檢定值是否隸屬於一組值或子查詢。

語法

expression [ NOT ] IN (expr_list | table_subquery)

引數

運算式

數值、字元或日期時間 (datetime) 表達式,會根據 expr_listtable_subquery 進行評估,而且必須與該清單或子查詢的資料類型相容。

expr_list

用英文逗號分隔的一個或多個表達式,或是用英文逗號分隔的一組或多組表達式 (用括號括住)。

table_subquery

子查詢,會評估包含一列或多列的資料表,但是其選擇清單中只限包含一個欄。

IN | NOT IN

如果表達式是表達式清單或查詢的成員,IN 會傳回 true。NOT 如果表達式不是成員,IN 會傳回 true。在下列情況下,IN 和 NOT IN 傳回NULL,且不會傳回任何資料列:如果表達式產生 null;或者沒有相符的 expr_listtable_subquery 值,且至少其中一個比較資料列產生 null。

範例

只有這些列出的值,才會讓下列條件傳回 true:

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

大型 IN 清單的最佳化

為了實現最佳化的查詢效能,包含超過 10 個值的 IN 清單,會在內部轉換為純量陣列。包含不到 10 個值的 IN 清單,會轉換為一系列的 OR 述詞。SMALLINT、INTEGER、、BIGINT、REAL、、DOUBLEPRECISIONBOOLEAN、CHAR、、VARCHAR、、DATE、TIMESTAMP、 和 TIMESTAMPTZ 資料類型支援此最佳化。

查看查詢的EXPLAIN輸出,以查看此最佳化的效果。例如:

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)