所以我有一个查询,当运行时,作为最后一列中的值,有1,4和8.但是当我改变HAVING条件时,这些值变为1,3和5.这不会使对我有任何意义。
这是我的SQL:
SELECT memberId, @temp:=total AS total, @runningTotal as runningTotal, @runningTotal:=@temp+@runningTotal AS newRunningTotal
FROM (
SELECT 1 AS memberId, 1 AS total UNION
SELECT 2, 2 UNION
SELECT 3, 2
) AS temp
JOIN (SELECT @temp:=0) AS temp2
JOIN (SELECT @runningTotal:=0) AS temp3
HAVING newRunningTotal <= 40;
这是SQL小提琴:
http://sqlfiddle.com/#!2/d41d8/27761/0
如果我将newRunningTotal更改为runningTotal,我会在runningTotal和newRunningTotal中获得不同的数字。这对我没有任何意义。
以下是更改后的查询的SQL小提琴:
http://sqlfiddle.com/#!2/d41d8/27762/0
有什么想法吗?
谢谢!
答案 0 :(得分:2)
MySQL documentation非常明确反对您在select
中执行的操作:
作为一般规则,除了在SET语句中,你永远不应该 为用户变量赋值并读取其中的值 声明。例如,要增加变量,这没关系:
SET @a = @a + 1;
对于其他语句,例如SELECT,您可能会得到结果 期待,但这不能保证。在以下声明中,您 可能会认为MySQL会首先评估@a然后做一个 第二个任务:
SELECT @a, @a:=@a+1, ...;
但是,评估顺序为 涉及用户变量的表达式是未定义的。
我认为你发现了一个有所作为的情况。
答案 1 :(得分:1)