Arrays 如何检查数组是否在多维数组中
我想用一个过滤查询来检查一个数组是否等于另一个多维数组的元素,这个多维数组可以看作是数组的数组 例如: 给定多维数组Arrays 如何检查数组是否在多维数组中,arrays,postgresql,multidimensional-array,Arrays,Postgresql,Multidimensional Array,我想用一个过滤查询来检查一个数组是否等于另一个多维数组的元素,这个多维数组可以看作是数组的数组 例如: 给定多维数组{{1,2},{3,4},{5,6},我想检查数组元素之一的一维数组 预期成果: 输入:{1,2}或{3,4}->输出:TRUE 输入:{2,3}或{1,5}->输出:FALSE 我已经试过了,如果没有任何pgpsql,这似乎是一个很难解决的问题。但是,如果使用此功能,则更简单: 使用: create table array_test (arr integer[][]);
{{1,2},{3,4},{5,6}
,我想检查数组元素之一的一维数组
预期成果:
- 输入:
或{1,2}
->输出:{3,4}
TRUE
- 输入:
或{2,3}
->输出:{1,5}
FALSE
我已经试过了
,如果没有任何pgpsql,这似乎是一个很难解决的问题。但是,如果使用此功能,则更简单:
使用:
create table array_test (arr integer[][]);
insert into array_test (select '{{1,2}, {3,4}, {5,6}}');
select (case when '{1,2}' in (select reduce_dim(arr) from array_test) then true
else false end);
case
------
t
(1 row)
select (case when '{1,4}' in (select reduce_dim(arr) from array_test) then true
else false end);
case
------
f
(1 row)
简单方法:像在字符串中一样在数组中搜索:
select '{{1, 2}, {3, 4}, {5, 6}}'::int[][]::text like '%{1,2}%';
复杂的方法:将数组分解为片(不使用plpgsql
):
你能告诉我你试过什么吗?
select '{{1, 2}, {3, 4}, {5, 6}}'::int[][]::text like '%{1,2}%';
with t(x) as (values('{{1, 2}, {3, 4}, {5, 6}}'::int[][]))
select *
from t
where (
select bool_or(x[s:s] = '{{1,3}}') from generate_subscripts(x,1) as s);