IN 條件 - Amazon Redshift

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

IN 條件

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

Syntax (語法)

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,並且在以下情況下不返回任何行:如果表達產生空值; 或者如果沒有匹配expr_list或者table_subquery值,並且這些比較行中至少有一個產生空值。

範例

只有這些列出的值,才會讓下列條件傳回 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、DOUBLE PRECISION、BOOLEAN、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)