可以保证函数unnest()
将按这些顺序返回值,它们的位置如何?
也就是说,例如:
arr (INTEGER[])
---------------
{{3,5},{33,3}}
此查询:
SELECT unnest(arr) FROM "table"
永远都会回来
3
5
33
3
?
或者可能结果会以不同的顺序排序,而不是数组元素的排序?
答案 0 :(得分:4)
以下是UNNEST result order vs Array data的有用链接。
这是一个假设:
一个不需要的()几乎肯定会按顺序扫描数组,但是一次 你在大型查询中嵌入了订单,不再保证。
从这个帖子引用:
unnest()以与输入相同的顺序返回其输出。既然一个 数组是有序的,它将以相同的输出顺序返回 UNNEST。但是,因为unexst()只返回一个列(但是 可能是复合类型)它不能提供行号 因此输出以便在查询中的其他地方保持相同的顺序 有必要在输出上使用“ROW_NUMBER()OVER(...)” unnest() - 以及在与任何其他不需要的调用或表连接之前 - 在将其提供给查询的其余部分之前。为9.4提出的“WITH ORDINALITY”功能将导致unexst()[和其他] 函数输出此附加列以及通常的输出。 这就是我非常可行的可用性增强功能 今天可以使用CTE / WITH和/或子查询完成的事情。
另一个有用的链接: