跳到主要内容
版本: 最新版本-3.5

array_contains_all

检查 arr1 是否包含 arr2 的所有元素,即 arr2 是否为 arr1 的子集。 如果是,则返回 1。 如果不是,则返回 0。

语法

BOOLEAN array_contains_all(arr1, arr2)

参数

arr:要比较的两个数组。 此语法检查 arr2 是否为 arr1 的子集。

两个数组中元素的数据类型必须相同。 有关 StarRocks 支持的数组元素的数据类型,请参见 ARRAY

返回值

返回 BOOLEAN 类型的值。

如果 arr2arr1 的子集,则返回 1。 否则,返回 0。

如果两个数组中的任何一个为 NULL,则返回 NULL。

使用说明

  • 如果数组包含 null 元素,则将 null 作为值处理。

  • 空数组是任何数组的子集。

  • 两个数组中的元素可以具有不同的顺序。

示例

  1. 创建一个名为 t1 的表并将数据插入到该表中。

    CREATE TABLE t1 (
    c0 INT,
    c1 ARRAY<INT>,
    c2 ARRAY<INT>
    ) ENGINE=OLAP
    DUPLICATE KEY(c0)
    DISTRIBUTED BY HASH(c0);

    INSERT INTO t1 VALUES
    (1,[1,2,3],[1,2]),
    (2,[1,2,3],[1,4]),
    (3,NULL,[1]),
    (4,[1,2,null],NULL),
    (5,[1,2,null],[null]),
    (6,[2,3],[]);
  2. 从此表中查询数据。

    SELECT * FROM t1 ORDER BY c0;
    +------+------------+----------+
    | c0 | c1 | c2 |
    +------+------------+----------+
    | 1 | [1,2,3] | [1,2] |
    | 2 | [1,2,3] | [1,4] |
    | 3 | NULL | [1] |
    | 4 | [1,2,null] | NULL |
    | 5 | [1,2,null] | [null] |
    | 6 | [2,3] | [] |
    +------+------------+----------+
  3. 检查 c2 的每一行是否是 c1 对应行的子集。

    SELECT c0, c1, c2, array_contains_all(c1, c2) FROM t1 ORDER BY c0;
    +------+------------+----------+----------------------------+
    | c0 | c1 | c2 | array_contains_all(c1, c2) |
    +------+------------+----------+----------------------------+
    | 1 | [1,2,3] | [1,2] | 1 |
    | 2 | [1,2,3] | [1,4] | 0 |
    | 3 | NULL | [1] | NULL |
    | 4 | [1,2,null] | NULL | NULL |
    | 5 | [1,2,null] | [null] | 1 |
    | 6 | [2,3] | [] | 1 |
    +------+------------+----------+----------------------------+

在输出中

对于第 1 行,c2c1 的子集,并返回 1。

对于第 2 行,c2 不是 c1 的子集,并返回 0。

对于第 3 行,c1 为 NULL,并返回 NULL。

对于第 4 行,c2 为 NULL,并返回 NULL。

对于第 5 行,两个数组包含 null 并且 null 被视为正常值,返回 1

对于第 6 行,c2 是一个空数组,被认为是 c1 的子集。 因此,返回 1