IN 條件 - AWS Clean Rooms

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

IN 條件

一個INcondition 會測試一組值或子查詢中的成員資格值。

語法

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,而且不會傳回任何列:如果 expression 產生 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、整數、大整數、實數、雙精度、布林值、字元、VARCHAR、日期、時間戳記和時間戳記資料類型支援此最佳化。

請檢視查詢的 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)