在 SELECT 语句中使用变量
使用 MySQL 时,您可能会遇到想要在同一个 SELECT 中定义和使用变量的情况陈述。但是,了解所涉及的限制非常重要。
变量赋值和可读性
根据 MySQL 文档,通常不建议为变量赋值用户变量并在同一语句中读取它。涉及用户变量的表达式的求值顺序未定义,并且可能会根据语句的元素而有所不同。
这意味着以下查询可能不会按预期运行:
SELECT @z:=SUM(item), 2*@z FROM TableA;
在这种情况下,您可能会在第二列中得到 NULL。
为什么与过程?
您可能想知道为什么以下使用存储过程而不是用户变量的查询能够按预期工作:
SELECT @z:=someProcedure(item), 2*@z FROM TableA;
这样做的原因是存储过程的评估方式与用户变量不同。存储过程的求值顺序已定义且一致。
使用子查询
要实现所需的功能,可以使用子查询:
select @z, @z*2 from (SELECT @z:=sum(item) FROM TableA ) t;
此方法使用子查询来初始化用户变量 (@z),然后在主查询中引用它。
以上是如何正确使用MySQL SELECT语句中的变量?的详细内容。更多信息请关注PHP中文网其他相关文章!