gpt4 book ai didi

postgresql - 如何在 PostgreSQL 中将 CASE 语句与 LATERAL JOIN 相结合?

转载 作者:行者123 更新时间:2023-11-29 12:20:24 25 4
gpt4 key购买 nike

我需要为每个选择行多次调用一个函数,因为函数有几个 OUT 参数,我都需要这些参数

例如

SELECT
a, b,
(SELECT out1 from func(a)),
(SELECT out2 from func(a))
FROM
table1

只在我使用横向连接时调用此函数

SELECT 
a, b,
lat.out1,
lat.out2
LEFT OUTER JOIN LATERAL (
SELECT out1, out2 FROM func(a)
) lat ON (TRUE)

问题是万一a 可以为空。 func 抛出被 null 调用的异常。然后没有加入我会这样做

SELECT
a, b,
CASE WHEN a IS NOT NULL
THEN out1 from func(a)
END,
CASE WHEN a IS NOT NULL
THEN out2 from func(a)
END
FROM
table1

但是我如何使用横向连接 来实现它呢?有没有办法在横向连接中使用 CASE?或者有没有其他方法可以只调用一次该过程?

最佳答案

好问题。您可以创建一个包装函数,当参数为 null 时返回一个空行集:

create or replace function wrap_func(a int)
returns table(out1 int, out2 int)
as $$
begin
if a is null then
return;
end if;
return query (
select out1, out2
from func(a)
);
end;
$$ language plpgsql;

如果您在 lateral 连接中调用包装器,它将按照您的预期运行。

关于postgresql - 如何在 PostgreSQL 中将 CASE 语句与 LATERAL JOIN 相结合?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29077756/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com