簡體   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