MySQL查询分配错误

时间:2015-10-08 11:34:43

标签: mysql sql

当我关注查询时

Select
case
        when (@nume=Start_Date)  then  null        
        when (@nume!=Start_Date) then @num
End,
case
        when (@nume=Start_Date and @nume:=End_Date)  then  null 
        when (@nume!=Start_Date) then @nume
End,
case
        when (@nume!=Start_Date and @nume:=End_Date and @num:=Start_Date)  then  @nume 
End
from P,(Select @num:=(Select Start_Date from P order by Start_Date desc Limit 1),@nume:=(Select End_Date from P order by Start_Date desc Limit 1 )) as A
;

在下一个回合中,它将整数1值分配给@nume,而不是按预期分配。

1 个答案:

答案 0 :(得分:2)

“因为它应该”。嗯,documentation明确指出:

  

作为一般规则,除了在SET语句中,你永远不应该   为用户变量赋值并读取其中的值   声明。例如,要增加变量,这没关系:

SET @a = @a + 1;
     

对于其他语句,例如SELECT,您可能会得到结果   期待,但这不能保证。在以下声明中,您   可能会认为MySQL会首先评估@a然后做一个   第二个任务:

     

SELECT @ a,@ a:= @ a + 1,...;

     

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

您对代码应该执行的操作的解释与文档直接矛盾。我建议您提出另一个问题,描述您要解决的问题,并包括样本数据和所需结果。