IN 条件 - Amazon Redshift
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

IN 条件

IN 条件测试一组值或一个子查询中的成员值。

语法

expression [ NOT ] IN (expr_list | table_subquery)

参数

expression

数字、字符或日期时间表达式,针对 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。

示例

下列条件仅对列出的值有效:

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)