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

标签 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 语句的左右两侧。当用户变量出现在定义它的表达式中时,这意味着什么?

最佳答案

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

i = i + 1;

当前值如果i被评估,然后加一,然后将结果赋值作为i的新值。

与SQL表达式中@f的赋值相同。首先使用 @f 的当前值评估赋值的右侧。然后将结果赋给左边,左边可能是表达式中涉及的变量之一。

关于在 SELECT 中定义它的表达式中使用的 MySQL 用户变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42475573/

相关文章:

php - 命令不同步;当我循环运行时,你现在不能运行这个命令

mysql - 'xxx' 中的未知列 'on clause'

php - 如何从自动增量字段获取字段值

php - Yii2 MongoDB 查询不工作

mysql - 在 MySql 中使用一个或多个 View 创建 UNION

java - hibernate 异常

mysql - MariaDB 崩溃 : Table doesn't exist in engine && can't recover tables

php - 从文件夹或mysql数据库收集文件列表?

mysql - 如果最后一条记录包含相同的值则更新,否则插入

php - 上传文件并显示,但在用户提交后保存到数据库