【发布时间】:2015-11-24 14:48:28
【问题描述】:
我有这个 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]。
【问题讨论】:
-
根据manual,这些表达式的求值顺序是未定义的。在这种情况下,这意味着
@my_sum := ...在@my_sum_copy :=...之后进行评估。您可能应该找到一种更强大的方法来做您需要的事情。 -
@Vatev:未定义,但在过去很长一段时间里,mysql 的评估/计算的东西左-> 右。虽然不能保证未来的行为,但它至少是半可靠的行为。
-
是的,它的行为仍然是半可靠的:它并不总是按照您的预期进行 :)
标签: mysql variables integer sum