为何PostgreSQL中该多维数组&&比较会返回true?
PostgreSQL数组
&&操作符的逻辑解析 首先明确:PostgreSQL里的&&是数组重叠操作符,核心作用是判断两个数组是否存在至少一个共同元素,和你以为的“按位置逐元素匹配”完全不是一回事。
具体规则
- 对于一维数组:直接检查两个数组是否有相同的单个元素,比如
ARRAY[1,2] && ARRAY[2,3]返回true,因为共享元素2。 - 对于多维数组:每个子数组会被当作一个独立的元素来比较,只有当两个数组包含完全相同的子数组(子数组的元素顺序、值都一致)时,才会判定为重叠。
分析你的示例
- 你提到
SELECT ARRAY[[2,0], [2,1]] && ARRAY[[3,1], [3,0]];返回true,这说明两个数组里一定存在某个完全相同的子数组——大概率是输入时的笔误,比如某一个数组的子数组写错了。但无论如何,这个结果的逻辑是两个数组有共享的子数组元素。 - 你预期的
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
相关产品推荐
相关产品推荐

