

 Amazon Redshift 將不再支援從修補程式 198 開始建立新的 Python UDFs。現有 Python UDF 將繼續正常運作至 2026 年 6 月 30 日。如需詳細資訊，請參閱[部落格文章](https://aws.amazon.com/blogs/big-data/amazon-redshift-python-user-defined-functions-will-reach-end-of-support-after-june-30-2026/)。

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

# IN 條件
<a name="r_in_condition"></a>

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

## 語法
<a name="r_in_condition-synopsis"></a>

```
expression [ NOT ] IN (expr_list | table_subquery)
```

## 引數
<a name="r_in_condition-arguments"></a>

 *表達式*   
數值、字元或日期時間 (datetime) 表達式，會根據 *expr\$1list* 或 *table\$1subquery* 進行評估，而且必須與該清單或子查詢的資料類型相容。

 *expr\$1list*   
用英文逗號分隔的一個或多個表達式，或是用英文逗號分隔的一組或多組表達式 (用括號括住)。

 *table\$1subquery*   
子查詢，會評估包含一列或多列的資料表，但是其選擇清單中只限包含一個欄。

IN \$1 NOT IN   
如果表達式是表達式清單或查詢的成員，IN 會傳回 true。如果表達式不是成員，NOT IN 會傳回 true。在下列情況中，IN 和 NOT IN 會傳回 Null，而且不會傳回任何列：如果 *expression* 產生 null；或如果沒有符合的 *expr\$1list* 或 *table\$1subquery* 值，而且這些比較列其中至少有一列產生 null。

## 範例
<a name="r_in_condition-examples"></a>

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

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

## 大型 IN 清單的最佳化
<a name="r_in_condition-optimization-for-large-in-lists"></a>

為了實現最佳化的查詢效能，包含超過 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)
```