所以,我有一个表调用顺序,由两个由值组成的结果组成。
执行此查询时:
SELECT @running_total := @running_total + orders.myVal AS cumulative_sum
From orders JOIN
(SELECT @running_total := 0) r
它返回此结果:
_____________________
|id | cumulative_sum |
|___|________________|
| 1 | 1 |
|___|________________|
| 2 | 3 |
|___|________________|
但是当我添加where子句WHERE @running_total <= 0.5
是
SELECT @running_total := @running_total + orders.myVal AS cumulative_sum
From orders JOIN (SELECT @running_total := 0)
WHERE @running_total <= 0.5
为什么会返回相同的结果?
据我所知,它不应该返回任何结果,因为两个结果都不包含任何小于0.5
的内容由于
答案 0 :(得分:1)
尝试这个:我认为,当您使用@running_total <= 0.5
检查条件时,此变量中没有分配任何值,因此它总是如此是真实的,回报价值。请查看@running_total <= 0.2
并返回true,然后按>
查看,您也会明白自己在做什么
SELECT * FROM (@running_total := @running_total + orders.myVal AS cumulative_sum
From orders
JOIN (SELECT @running_total := 0) r) t WHERE @running_total <= 0.5
答案 1 :(得分:1)
何时&#34;哪里&#34;在上面添加的子句不满足单个记录的条件,然后它总是返回第一个记录,而不是相同的结果集。
请参阅此示例:http://sqlfiddle.com/#!9/bc0a4/3
似乎在分配给&#34; @ running_total&#34;变量应该应用Where子句。
答案 2 :(得分:0)
关于变量的MySQL documentation解释了:
在
SELECT
语句中,每个select表达式仅在以下时进行计算 发送给客户。
换句话说,在评估WHERE
之前评估SELECT
。您已设置变量0
的值,因此所有行都会通过该条件。
正如其他地方所解释的,子查询解决了这个问题。
我还应该注意,在没有ORDER BY
的情况下运行查询意味着结果是以任意的,不确定的顺序。