IN 条件 - AWS Clean Rooms

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

IN 条件

网络 ACL 和安全组都允许 (因此可到达您的实例) 的发起 ping 的 IN 条件测试一组值或子查询中的成员资格值。

语法

expression [ NOT ] IN (expr_list | table_subquery)

参数

expression

数字、字符或日期时间表达式,针对 expr_listtable_subquery 进行计算,必须是与列表或子查询的数据类型兼容的。

expr_list

一个或多个逗号分隔的表达式,或一组或多组逗号分隔的表达式(用括号限定)。

table_subquery

一个子查询,计算结果为具有一行或多行的表,但在其选择列表中限制为一列。

在 | NOT 在

如果表达式是表达式列表或查询的成员,则 IN 返回 true。 NOT如果表达式不是成员,IN 则返回 true。在以下情况下,返回 IN NULL 和 IN 且不返回任何行:如果表达式结果为空;或者如果没有匹配的 expr_list 或 table_s ubquery 值,并且这些比较行中至少有一个返回空值。NOT

示例

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

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、DOUBLEPRECISIONBOOLEANCHARVARCHARDATETIMESTAMP、和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)