2

保证函数unnest()将按这些顺序返回值,它们是如何定位的?

也就是说,例如:

arr (INTEGER[])
---------------
{{3,5},{33,3}}

这个查询:

SELECT unnest(arr) FROM "table"

总是会回来

 3
 5
 33
 3

?

或者结果的排序可能与数组元素的排序不同?

4

1 回答 1

4

这是UNNEST 结果顺序与数组数据的有用链接。

这是一个假设:

unnest() 几乎肯定会按顺序扫描数组,但是一旦将其嵌入到大型查询中,就不再保证排序。

从这个线程引用:

unnest() 以与输入相同的顺序返回其输出。由于数组是有序的,因此 unnest 将以相同的输出顺序返回。但是,由于 unnest() 仅返回单个列(尽管可能是复合类型),因此它无法在输出中提供行号,因此为了在查询中的其他位置保持相同的顺序,有必要使用 "ROW_NUMBER() OVER (...)" 在 unnest() 的输出上 - 在将其与任何其他 unnest 调用或表连接之前 - 在将其提供给查询的其余部分之前。为 9.4 提议的“WITH ORDINALITY”功能将导致 unnest() [和其他] 函数将这个附加列与通常的输出一起输出。这就是,我就是这样,

另一个有用的链接:

于 2013-09-04T14:50:54.990 回答