繁体   English   中英

如何将select分配给变量并在case语句中使用它

[英]How to assign select into variable and use it in case statement

我在 postgres 中有查询:

SELECT CASE WHEN (Select money from Bank)  is not null THEN (Select money from Bank) ELSE -1 end;

有没有可能不在 'THEN' 中重复这个子查询? 我想做类似的事情:

SELECT CASE WHEN ((Select money from Bank) = MONEY)  is not null THEN MONEY ELSE -1 end;

我需要在一个 Select 语句中执行此操作。

一种方法是使用coalesce()

SELECT COALESCE( (Select money from Bank), -1)

子查询可能仍会运行两次(由于COALESCE()的语义)——我不确定 Postgres 如何优化它。

您可以通过将逻辑移至from子句来解决此问题:

select coalesce(b.money, -1)
from (Select money from Bank) b

注意:如果Bank为空,这将不会返回任何行。 不过,我的猜测是您已经简化了查询并且有更多条件。 如果bank真的最多只有一行,那么您可以使用:

select coalesce(max(b.money), -1)
from bank b

如果这确实是一个更复杂的查询,您可能需要横向连接:

select . . ., coalesce(b.money, -1)
from . . . left join lateral
     (Select money from Bank) b;

SELECT isnull( (从银行选择钱), -1)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM