打扰一下,如果已经问过这个问题,但是搜索合并会带来一堆对我没有帮助的结果......
在mysql中,我正在尝试使用coalesce为变量设置初始值,该变量使用依赖于现有值的表达式设置。我真的很喜欢用一个语句来做,但是我遇到一个问题,当变量为null时从合并中返回的值似乎并不“坚持”并且我每次都得到初始值。奇怪的是,如果我最初将变量设置为null,它将按预期工作。
考虑这个问题:
select @y := coalesce(@y+1, 5)
from table
limit 5;
它返回:
5
5
5
5
5
但是这个:
set @z = null;
select @z := coalesce(@z+1, 5)
from table
limit 5;
返回我的期望:
5
6
7
8
9
这是一个错误还是预期的行为?解决方案是刚刚将变量设置为null吗?
答案 0 :(得分:3)
您可以在“(select ...)alias”参考中初始化SQL变量,如下所示。你只需要确保你的别名,比如我已经完成了SQLVars,否则它会扼杀你。然后,您可以根据需要构建任何数据类型。
select
@z := z+1 as NextNumber
from table,
( select @z := 5,
@AnotherVar := 'First Value',
@AnythingElse := 390.290 ) SQLVars
limit 5;