首页 > 数据库 > mysql教程 > 为什么在单个 SQL SELECT 语句中使用变量经常返回意外结果?

为什么在单个 SQL SELECT 语句中使用变量经常返回意外结果?

DDD
发布: 2024-12-20 22:29:13
原创
302 人浏览过

Why Does Using Variables in a Single SQL SELECT Statement Often Return Unexpected Results?

在 SELECT 语句中声明和使用变量

在 SQL 中,为变量赋值并在同一查询中检索该值可以具有挑战性。考虑以下示例:

SELECT 
    @z:=SUM(item),
    2*@z
FROM
    TableA;
登录后复制

此查询尝试计算“item”列的总和并将其存储在名为“@z”的变量中。然后它将“@z”的值乘以 2。然而,令人惊讶的是,第二列总是返回 NULL。

出现这种情况是因为 MySQL 的文档明确指出将值分配给用户变量并在不应依赖同一声明。此类表达式的求值顺序未定义,并且可能会在未来版本中发生更改。

为了进一步说明这一点,请考虑替代查询:

SELECT 
    @z:=someProcedure(item),
    2*@z
FROM
    TableA;
登录后复制

在此查询中,“@z”是通过过程调用分配一个值。在这种情况下,查询按预期工作,因为过程调用是与变量分配分开评估的。

要克服用户变量的限制,您可以利用子查询来分配值并在主查询中检索它查询:

select @z, @z*2
from (SELECT @z:=sum(item)
      FROM TableA
     ) t;
登录后复制

在此子查询中,使用 SELECT 分配“@z”的值。然后主查询选择“@z”并执行必要的计算。

以上是为什么在单个 SQL SELECT 语句中使用变量经常返回意外结果?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板