我有一个问题:
select a,b,c,d
from x
join y using (id)
join z using (id2)
where....
此查询提供了许多行。
我想在查询的每一行上运行func2(a,b,c,d)
。
我试过了:
with B as (
select a,b,c,d
from x
join y using (id)
join z using (id2)
where....)
select func2(a,b,c,d)
from B
但它不起作用。我不确定WITH
是否是正确的解决方案。
答案 0 :(得分:3)
您只需在select中运行该功能即可。这将循环返回的每一行。请尝试以下方式:
select func2(a,b,c,d)
from x
join y using (id)
join z using (id2)
where....
答案 1 :(得分:1)
可以在选择查询中使用某个功能
例如
create table t(a int,b int);
insert into t select generate_series(1,5), generate_series(5,5);
如果你有类似下面的功能
create function fn(val int,val1 int) returns integer
as
$$
select $1+$2;
$$
language sql
用法:
select fn(1,2)
结果:
fn
--
3
(1 row(s) affected)
与将其与选择查询
一起使用的方式相同select a,b,fn(a,b)
from t
结果:
a b fn
- - --
1 5 6
2 5 7
3 5 8
4 5 9
5 5 10
(5 row(s) affected)
另一方面你的WITH查询应该有效我猜这个问题是别的什么
请参阅此demo