postgresql 当元素是数组时,元素列表中的元素

0wi1tuuw  于 2023-06-22  发布在  PostgreSQL
关注(0)|答案(2)|浏览(145)

在Postgres中,正确的语法是什么?

SELECT ARRAY[4,5,6] IN ARRAY[[4,5,6],[7,8,9]];

有些数据库有list_containsIN UNNEST(arr_expr)来做上面的事情,但我还没有运气检查Postgres文档。

vwhgwdsa

vwhgwdsa1#

如果包含数组的子数组的长度都相同,则应该可以使用array-contains运算符

richardh=> SELECT ARRAY[1,2,3] <@ ARRAY[ARRAY[1,2,3], ARRAY[4,5,6]];
 ?column? 
----------
 t
(1 row)

但是,要知道它在匹配方面比您可能希望的更“慷慨”

richardh=> SELECT ARRAY[1,2,3] <@ ARRAY[ARRAY[1,2,3,4], ARRAY[4,5,6,7]];
 ?column? 
----------
 t
(1 row)

详情请参见the manuals

2izufjch

2izufjch2#

UNNEST“展平”多维数组,因此在这里没有用
array-contains(<@运算符)也在内部“展平”这样的数组
您可以尝试将数据存储为JSON(B),它将按预期工作:

SELECT count(*)
FROM jsonb_array_elements('[[4,5,6],[7,8,9]]'::jsonb) arr_rows
WHERE arr_rows = '[4,5,6]'::jsonb;

SELECT count(*)
FROM jsonb_array_elements('[[4,5,6],[7,8,9]]'::jsonb) arr_rows
WHERE arr_rows = '[4,5,6,7]'::jsonb;

SELECT count(*)
FROM jsonb_array_elements('[[4,5,6],[7,8,9]]'::jsonb) arr_rows
WHERE arr_rows = '[4,5]'::jsonb;

相关问题