使用coalesce在查询中设置变量的初始值

时间:2011-10-26 18:05:02

标签: mysql

打扰一下,如果已经问过这个问题,但是搜索合并会带来一堆对我没有帮助的结果......

在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吗?

1 个答案:

答案 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;