Amazon Redshift
数据库开发人员指南 (API Version 2012-12-01)
AWS 服务或AWS文档中描述的功能,可能因地区/位置而异。点 击 Getting Started with Amazon AWS to see specific differences applicable to the China (Beijing) Region.

IN 条件

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

语法

Copy
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。

示例

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

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

大型 IN 列表的优化

为了优化查询性能,包含 10 个以上的值的 IN 列表将在内部作为标量数组计算。少于 10 个值的 IN 列表将作为一系列 OR 谓词计算。除 DECIMAL 之外的所有数据类型均支持此优化。

查看查询的 EXPLAIN 输出以查看此优化的效果。例如:

Copy
explain select * from sales where salesid in (1,2,3,4,5,6,7,8,9,10,11); 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)