我有这个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]。
答案 0 :(得分:0)
来自文档:
...
作为一般规则,除了在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`;