You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何PostgreSQL中该多维数组&&比较会返回true?

PostgreSQL数组&&操作符的逻辑解析

首先明确:PostgreSQL里的&&是数组重叠操作符,核心作用是判断两个数组是否存在至少一个共同元素,和你以为的“按位置逐元素匹配”完全不是一回事。

具体规则

  • 对于一维数组:直接检查两个数组是否有相同的单个元素,比如ARRAY[1,2] && ARRAY[2,3]返回true,因为共享元素2。
  • 对于多维数组:每个子数组会被当作一个独立的元素来比较,只有当两个数组包含完全相同的子数组(子数组的元素顺序、值都一致)时,才会判定为重叠。

分析你的示例

  1. 你提到SELECT ARRAY[[2,0], [2,1]] && ARRAY[[3,1], [3,0]];返回true,这说明两个数组里一定存在某个完全相同的子数组——大概率是输入时的笔误,比如某一个数组的子数组写错了。但无论如何,这个结果的逻辑是两个数组有共享的子数组元素。
  2. 你预期的SELECT ARRAY[[2,0], [3,1]] && ARRAY[[3,1], [3,0]];返回true是完全正确的,因为两个数组都包含子数组[3,1],满足重叠条件。

补充:按位置匹配的需求

如果你需要的是按位置逐元素判断两个数组是否完全相等,应该用=操作符:

  • SELECT ARRAY[[2,0], [3,1]] = ARRAY[[3,1], [3,0]]; 返回false,因为对应位置的子数组不匹配
  • SELECT ARRAY[[3,1], [3,0]] = ARRAY[[3,1], [3,0]]; 返回true,所有位置的元素都一致

内容的提问来源于stack exchange,提问作者Paul Wanjohi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 05:34:55