用于表达式的MySQL用户变量在SELECT中定义它

时间:2017-02-26 23:32:32

标签: mysql

我正在尝试从this answer了解以下代码段:

  SELECT   my_table.*,
           @f:=CONVERT(
             IF(@c<=>CatId AND @r<=>Rate AND DATEDIFF(Date, @d)=1, @f, Date), DATE
           ) AS Begin,
           @c:=CatId, @d:=Date, @r:=Rate
  FROM     my_table JOIN (SELECT @c:=NULL) AS init
  ORDER BY CatId, Rate, Date

我的困惑在于如何分配@f。名称@f本身出现在@f := expr语句的左侧和右侧。当用户变量出现在定义它的表达式中时,它意味着什么?

1 个答案:

答案 0 :(得分:1)

您是否曾在任何编程语言中使用过这样的语句:

i = i + 1;

评估i时的当前值,然后添加一个,然后将结果指定为i的新值。

在SQL表达式中赋值@f时也是如此。首先使用当前值@f评估赋值的右侧。然后将结果分配给左侧,这可能是表达式中涉及的变量之一。