我正在尝试从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
语句的左侧和右侧。当用户变量出现在定义它的表达式中时,它意味着什么?
答案 0 :(得分:1)
您是否曾在任何编程语言中使用过这样的语句:
i = i + 1;
评估i
时的当前值,然后添加一个,然后将结果指定为i
的新值。
在SQL表达式中赋值@f
时也是如此。首先使用当前值@f
评估赋值的右侧。然后将结果分配给左侧,这可能是表达式中涉及的变量之一。