保证函数unnest()
将按这些顺序返回值,它们是如何定位的?
也就是说,例如:
arr (INTEGER[])
---------------
{{3,5},{33,3}}
这个查询:
SELECT unnest(arr) FROM "table"
总是会回来
3
5
33
3
?
或者结果的排序可能与数组元素的排序不同?
保证函数unnest()
将按这些顺序返回值,它们是如何定位的?
也就是说,例如:
arr (INTEGER[])
---------------
{{3,5},{33,3}}
这个查询:
SELECT unnest(arr) FROM "table"
总是会回来
3
5
33
3
?
或者结果的排序可能与数组元素的排序不同?
这是UNNEST 结果顺序与数组数据的有用链接。
这是一个假设:
unnest() 几乎肯定会按顺序扫描数组,但是一旦将其嵌入到大型查询中,就不再保证排序。
从这个线程引用:
unnest() 以与输入相同的顺序返回其输出。由于数组是有序的,因此 unnest 将以相同的输出顺序返回。但是,由于 unnest() 仅返回单个列(尽管可能是复合类型),因此它无法在输出中提供行号,因此为了在查询中的其他位置保持相同的顺序,有必要使用 "ROW_NUMBER() OVER (...)" 在 unnest() 的输出上 - 在将其与任何其他 unnest 调用或表连接之前 - 在将其提供给查询的其余部分之前。为 9.4 提议的“WITH ORDINALITY”功能将导致 unnest() [和其他] 函数将这个附加列与通常的输出一起输出。这就是,我就是这样,
另一个有用的链接: