跳到主要内容

IN 运算符

IN 运算符用于检查左侧表达式是否包含在右侧(RHS)的_集合_中。 RHS 支持的集合类型包括元组、列表、映射以及返回单列的子查询。

IN (val1, val2, ...) (Tuple)

对元组 (val1, val2, ...) 使用 IN 运算符时:若表达式存在于 RHS 中则返回 true;若不存在且 RHS 不含 NULL 则返回 false;若不存在且 RHS 含有 NULL 则返回 NULL

SELECT 'Math' IN ('CS', 'Math');
true
SELECT 'English' IN ('CS', 'Math');
false
SELECT 'Math' IN ('CS', 'Math', NULL);
true
SELECT 'English' IN ('CS', 'Math', NULL);
NULL

IN [val1, val2, ...] (List)

IN 在列表上的行为遵循 Python 的语义。 与 IN tuple 运算符不同,表达式右侧是否包含 NULL 不会影响结果:

SELECT 'Math' IN ['CS', 'Math', NULL];
true
SELECT 'English' IN ['CS', 'Math', NULL];
false

IN Map

INmap 上同样遵循 Python 语义,即检查的是键是否存在(而不是值):

SELECT 'key1' IN MAP {'key1': 50, 'key2': 75};
true
SELECT 'key3' IN MAP {'key1': 50, 'key2': 75};
false

IN Subquery

IN 运算符可用于返回单列的子查询。 例如:

SELECT 42 IN (SELECT unnest([32, 42, 52]) AS x);
true

如果子查询返回超过一列,将抛出 Binder Error:

SELECT 42 IN (SELECT unnest([32, 42, 52]) AS x, 'a' AS y);
Binder Error:
Subquery returns 2 columns - expected 1

IN String

IN 运算符也可作为字符串函数 contains 的简写形式。 例如:

SELECT 'Hello' IN 'Hello World';
true

NOT IN

NOT IN 用于检查元素是否不在集合中。 x NOT IN y 等价于 NOT (x IN y)