MySQL变量从SUM()获取NULL

时间:2015-11-24 14:48:29

标签: mysql variables integer sum

我有这个MySQL声明:

SELECT  @my_sum := SUM(delibera.particolari_prodotti),
@my_sum_copy := @my_sum + 1
FROM delibera

我无法理解@my_sum有数值但@my_sum_copy为NULL的原因。

我也试过这个:

SELECT  @my_sum := SUM(delibera.particolari_prodotti),
@my_sum_copy := CONVERT(@my_sum, UNSIGNED) + 1
FROM delibera

......而且这个:

SELECT  @my_sum := CONVERT(SUM(delibera.particolari_prodotti), UNSIGNED),
@my_sum_copy := @my_sum + 1
FROM delibera

但它是一样的。

如何让@my_sum_copy有一个有效的数值?

非常感谢。

更新: 使用代码

SELECT
    @`my_sum`,
    @`my_sum_copy` := @`my_sum` + 1
    FROM 
    (
        SELECT
            @`my_sum` := SUM(`particolari_prodotti`)
        FROM
        `delibera`,
            (SELECT
                @`my_sum` := NULL,
                @`my_sum_copy` := NULL
            ) `inner_der` 
        ) `outer_der`;

我终于得到了@my_sum_copy的值。

但现在@my_sum设置为[BLOB - 8 B]。

1 个答案:

答案 0 :(得分:0)

来自文档:

  

9.4 User-Defined Variables

     

...

     

作为一般规则,除了在SET语句中,你永远不应该   为用户变量赋值并读取其中的值   言。

     

...

     

对于其他语句,例如SELECT,您可能会得到您期望的结果,但这不能保证。

     

...

     

...,涉及用户变量的表达式的评估顺序是未定义的。

     

...

一个有用的选项是使用子查询:

SELECT
  @`my_sum`,
  @`my_sum_copy` := @`my_sum` + 1
FROM 
  (
    SELECT
      @`my_sum` := SUM(`particolari_prodotti`)
    FROM
      `delibera`,
      (SELECT
         @`my_sum` := NULL,
         @`my_sum_copy` := NULL
      ) `inner_der` 
  ) `outer_der`;

SQL Fiddle demo