我有一种情况,我想在条件设置时设置多个变量。
IF(expr1, @reading:=0 and @prevdate:=@stepdate, @reading:=@reading)
如您所见,我想设置@reading:=0 and @prevdate:=@stepdate
,但这不起作用。
如何在true
或false
节点内设置多个用户变量?
答案 0 :(得分:2)
<强>问题强>
AND
进行短路评估
@reading:= 0
的计算结果为0,这是错误的。
0 and x
始终为0,因此MySQL不打算评估x
OR
遇到同样的问题:1 OR x
总是如此
如果已知结果,这可以通过停止来加快速度。
<强>解决方案强>
将其更改为@reading:= 0 XOR @prevdate:= @stepdate
这将解决您的问题,因为XOR不会受到短路评估的影响。
1 XOR x
可以是0 XOR x
。