gpt4 book ai didi

sql - SQL 中的分层分配与短路分配?

转载 作者:行者123 更新时间:2023-12-02 18:13:21 32 4
gpt4 key购买 nike

SQL 是否同时具有短路语法和分层多重求值语法?

短路分配示例。这里,当 ... 为 true 时,decision 获得 FIRST *** 子句:

短路

   case  
when (...) then (***)
when (...) then (***)
when (...) then (***)
else (...)
end as decision

分层分配的示例。这里,当 ... 为 true 时,decision 获取 LAST *** 表达式。

分层

    if (...) then (decision = ***) end
if (...) then (decision = ***) end
if (...) then (decision = ***) end

相互转换

很明显,反转表达式的顺序可以在分层和短路之间切换。我想知道 SQL 是否也有一个可以分配 LAST tr 表达式的构造?

测试用例:

下面给出了一个非常简单的玩具示例:

select 
flag1, flag2, flag3,
case
when flag1=1 and flag2=0 then 'LEFT'
when flag1=0 and flag2=0 then 'NONE'
when flag2=0 and flag3=1 then 'RIGHT'
end as decision
FROM
( select
1 as flag1, 0 as flag2, 1 as flag3
-- from dual -- if you use Oracle
) tmp ;

短路 SQL 将返回“LEFT”

分层分配将返回“RIGHT”。

编辑:您可以在 SQL-Fiddle 中运行此示例单击链接。 (感谢 ypercube 指出这个有用的网站!(+1))

最佳答案

没有任何表达式可以在一次选择中执行层次分配,但它可以像任何其他编程语言一样通过多个 if 语句来实现

DECLARE @flag1 BIT = 1, @flag2 BIT = 0, @flag3 BIT = 1, @decision VARCHAR(50)

IF @flag1 = 1 AND @flag2 = 0
SET @decision = 'LEFT'

IF @flag1 = 0 AND @flag2 = 0
SET @decision = 'NONE'

IF @flag2 = 0 AND @flag3 = 1
SET @decision = 'RIGHT'

SELECT @decision

关于sql - SQL 中的分层分配与短路分配?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14287802/

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