从dedust()函数排序的结果

时间:2013-09-04 14:40:38

标签: postgresql postgresql-9.2

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

也就是说,例如:

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

此查询:

SELECT unnest(arr) FROM "table"

永远都会回来

 3
 5
 33
 3

或者可能结果会以不同的顺序排序,而不是数组元素的排序?

1 个答案:

答案 0 :(得分:4)

以下是UNNEST result order vs Array data的有用链接。

这是一个假设:

  

一个不需要的()几乎肯定会按顺序扫描数组,但是一次   你在大型查询中嵌入了订单,不再保证。

从这个帖子引用:

  

unnest()以与输入相同的顺序返回其输出。既然一个   数组是有序的,它将以相同的输出顺序返回   UNNEST。但是,因为unexst()只返回一个列(但是   可能是复合类型)它不能提供行号   因此输出以便在查询中的其他地方保持相同的顺序   有必要在输出上使用“ROW_NUMBER()OVER(...)”   unnest() - 以及在与任何其他不需要的调用或表连接之前    - 在将其提供给查询的其余部分之前。为9.4提出的“WITH ORDINALITY”功能将导致unexst()[和其他]   函数输出此附加列以及通常的输出。   这就是我非常可行的可用性增强功能   今天可以使用CTE / WITH和/或子查询完成的事情。

另一个有用的链接: