【问题标题】:postgres, contains-operator for multidimensional arrays performs flatten before comparing?postgres,多维数组的包含运算符在比较之前执行展平?
【发布时间】:2013-08-23 22:12:10
【问题描述】:

以下查询:

SELECT ARRAY[[1,2,3], [4,5,6], [7,8,9]] @> ARRAY[2, 3, 5];

按预期返回 true 而不是 false,因为源数组中不存在 array[2, 3, 5]。有什么想法怎么会发生?或许flatten应用于多维数组?

【问题讨论】:

  • 更可怕的是:SELECT unnest(ARRAY[[1,2,3], [4,5,6], [7,8,9]]);提供 unnest -------- 1 2 3 4 5 6 7 8 9 因此似乎应用了扁平化:-/ 预期:-------- {1,2,3} {4,5, 6} {7,8,9}
  • 看起来它确实进行了预压扁 - SELECT ARRAY[[1,2,3], [4,5,6], [7,8,9]] @> ARRAY[[2], [3], [5]] 也返回 true
  • 是的,问题是为什么? :)

标签: arrays postgresql multidimensional-array contains


【解决方案1】:

这不是为什么,但我试图找到一种方法来做你需要的,到目前为止我最好的是:

with cte_arr as (
   select ARRAY[[1,2,3], [4,5,6], [7,8,9], [10,11, 12], [2,5,3]] as arr
), cte_s as (
   select generate_subscripts(arr,1) as subscript, arr
   from cte_arr
)
select arr[subscript:subscript] @> ARRAY[2, 3, 5], arr[subscript:subscript]
from cte_s

sql fiddle demo

一些关于 PostgreSQL 中数组的有用链接:

【讨论】:

猜你喜欢
  • 2023-03-28
  • 1970-01-01
  • 2013-12-28
  • 1970-01-01
  • 2017-03-28
  • 2011-12-17
  • 2021-07-01
  • 2017-02-05
  • 1970-01-01
相关资源
最近更新 更多