我试图理解来自 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
语句的左右两侧。当用户变量出现在定义它的表达式中时,这意味着什么?
最佳答案
您是否曾经在任何编程语言中使用过这样的语句:
i = i + 1;
当前值如果i
被评估,然后加一,然后将结果赋值作为i
的新值。
与SQL表达式中@f
的赋值相同。首先使用 @f
的当前值评估赋值的右侧。然后将结果赋给左边,左边可能是表达式中涉及的变量之一。
关于在 SELECT 中定义它的表达式中使用的 MySQL 用户变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42475573/