我有一个函数test_func(),它接受1个参数(假设参数名称为X)并返回一个表。现在,我有了一个输入列表(来自子查询),这些输入要传递给参数X并在表中收集所有调用结果。
在Python中,我会做类似
的操作# create empty list
all_results = []
for argument in (1,2,3):
result = test_func(argument)
# Collect the result
all_results.append(result)
return all_results
如何在Postgresql中做同样的事情?
谢谢。
为示例起见,我的test_func(X)接受1个参数,并吐出一个包含3列的表。 col1的值为X,col2的值为X + 1,col3的值为X + 3。例如:
select * from test_func(1)
给予
|col1|col2|col3|
----------------
| 1 | 2 | 3 |
----------------
我的参数列表将是子查询的结果,例如:
select * from (values (1), (2)) x
我希望这样:
|col1|col2|col3|
----------------
| 1 | 2 | 3 |
----------------
| 2 | 3 | 4 |
----------------
答案 0 :(得分:1)
您可以将函数连接到输入值:
select f.*
from (
values (1), (2)
) as x(id)
cross join lateral test_func(x.id) as f;
答案 1 :(得分:1)
这会为您提供所有结果的结果列表:
SELECT
mt.my_data as input,
tf.*
FROM
(SELECT * FROM my_table) mt, -- input data from a subquery
test_func(my_data) tf -- calling every data set as argument
在小提琴中,test_func()
得到一个integer
并生成行(输入参数=生成的行数)。此外,它添加了一个text
列。对于所有输入,所有生成的记录都合并为一个结果集。