array_contains_all
检查 arr1
是否包含 arr2
的所有元素,即 arr2
是否为 arr1
的子集。 如果是,则返回 1。 如果不是,则返回 0。
语法
BOOLEAN array_contains_all(arr1, arr2)
参数
arr
:要比较的两个数组。 此语法检查 arr2
是否为 arr1
的子集。
两个数组中元素的数据类型必须相同。 有关 StarRocks 支持的数组元素的数据类型,请参见 ARRAY。
返回值
返回 BOOLEAN 类型的值。
如果 arr2
是 arr1
的子集,则返回 1。 否则,返回 0。
如果两个数组中的任何一个为 NULL,则返回 NULL。
使用说明
-
如果数组包含
null
元素,则将null
作为值处理。 -
空数组是任何数组的子集。
-
两个数组中的元素可以具有不同的顺序。
示例
-
创建一个名为
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],[]); -
从此表中查询数据。
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] | [] |
+------+------------+----------+ -
检查
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 行,c2
是 c1
的子集,并返回 1。
对于第 2 行,c2
不是 c1
的子集,并返回 0。
对于第 3 行,c1
为 NULL,并返回 NULL。
对于第 4 行,c2
为 NULL,并返回 NULL。
对于第 5 行,两个数组包含 null
并且 null
被视为正常值,返回 1
。
对于第 6 行,c2
是一个空数组,被认为是 c1
的子集。 因此,返回 1
。