我只是在阅读Erwin Brandstetter 的这个答案。像往常一样提供信息,它注意到 (multi-parameter)unnest
只允许在FROM
子句中。我从未在SELECT
子句中尝试过,所以我并不感到震惊,但我从未见过可以控制执行上下文的函数:FROM
vs SELECT
set-returning-functions。
Docs for unnest(anyarray, anyarray [, ...])
(多参数版本)
将多个数组(可能是不同类型的)扩展为一组行。这仅在 FROM 子句中允许;见第 7.2.1.4 节
如何将他们的集合返回函数声明为仅 FROM 子句,或者这仅允许使用unnest
?
恐怕这
unnest()
毕竟是可能的。unnest()
具有多个参数是 Postgres 的一个特殊功能,它在内部被重写为多个调用,这些调用比列表中的unnest()
并行组合更合理,即如果元素数量不匹配,则以一种理智的方式。unnest()
SELECT
这种行为最终用 Postgres 10 进行了清理:
看:
ROWS FROM
这是使用相同 Postgres 版本 9.4 引入的构造的特殊用例。手册:大胆强调我的。
如果您尝试
unnest()
使用列表中的多个参数SELECT
,您会得到:实际上,
unnest()
系统中并没有注册多个参数的函数:如果您不知道我的答案的第一部分,那将令人困惑。