多次调用带有数组参数的集合返回函数
您有一个函数,它处理具有给定参数的行数组,并且返回一组带有附加列的行。
问题:如何在不向函数传递 dataid 的情况下对不同的数据组多次调用此函数?
答案:
在 Postgres 9.3 或更高版本中,使用 LEFT JOIN LATERAL ... ON true 语法:
SELECT sub.dataid, f.* FROM ( SELECT dataid, array_agg(data) AS arr FROM dataset WHERE dataid = something GROUP BY 1 ) sub LEFT JOIN LATERAL foo(sub.arr) f ON true;
如果 foo() 函数可以返回 no行,此形式将保留连接左侧的所有行,即使没有行返回到右侧。
如果函数无法返回任何行,或者如果您想排除没有结果的行横向连接,使用:
CROSS JOIN LATERAL foo(sub.arr)
或者,您可以使用简写:
, foo(sub.arr)
此方法推荐用于 Postgres 9.3 及更高版本。对于早期版本,请参考其他可用的解决方案。
以上是如何在 PostgreSQL 中使用数组参数多次调用返回集合的函数?的详细内容。更多信息请关注PHP中文网其他相关文章!