SQL是否同时具有短路和分层多求值语法?
短路分配示例。这里decision
得到FIRST ***子句,当…是真的:
decision
得到LAST ***表达式当…是真的。<标题>层次h1> Inter-Conversion h1> 然,反转表达式的顺序在分层和短路之间切换。我想知道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'。
Edit:您可以通过单击链接在SQL-Fiddle中运行此示例。(感谢hypercube指出这个有用的网站!(+ 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来说,这不是很重要,因为你最终在CASE WHEN
子句中只有一个值。所以你所需要做的就是重新安排你的条件。
在其他语言中,你做一些计算存储在变量等中,在纯 SQL中,情况并非如此。