我可以在 SELECT 中定义变量并在同一语句中使用它吗?
在 SELECT 中定义和使用变量的可能性同样的 SELECT 语句经常受到质疑。考虑以下示例:
SELECT @z:=SUM(item), 2*@z FROM TableA;
在这种情况下,第二列始终返回 NULL。这是很奇怪的,因为使用存储过程的类似操作按预期运行:
SELECT @z:=someProcedure(item), 2*@z FROM TableA;
解释
MySQL 文档明确指出为用户变量赋值在同一个声明中阅读它是不可靠的。用户变量的计算顺序是未定义的,并且可能会根据语句元素和 MySQL 服务器版本而有所不同。因此,无法保证预期的结果。
解决方案
要达到预期的结果,可以使用子查询:
select @z, @z*2 from (SELECT @z:=sum(item) FROM TableA ) t;
以上是我可以在单个 MySQL SELECT 语句中使用用户定义的变量吗?的详细内容。更多信息请关注PHP中文网其他相关文章!