当我跟踪查询时

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,而不是它应该赋给的日期。

最佳答案

“这是应该的”。嗯,documentation明确声明:
一般来说,除了在SET语句中,您不应该
将值赋给用户变量,并在同一变量中读取该值
陈述。例如,要增加变量,可以这样做:

SET @a = @a + 1;

对于其他语句,例如SELECT,您可能会得到
期待,但这并不能保证。在下面的声明中,您
可能认为MySQL将首先计算@a,然后执行
作业二:
选择@a,@a:=@a+1。。。;
然而,涉及用户的表达式的求值顺序
变量未定义。
您对代码应该做什么的解释与文档直接矛盾。我建议你再问一个问题,描述你试图解决的问题,包括样本数据和期望的结果。

07-24 09:22