当我关注查询时
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,而不是按预期分配。
答案 0 :(得分:2)
“因为它应该”。嗯,documentation明确指出:
作为一般规则,除了在SET语句中,你永远不应该 为用户变量赋值并读取其中的值 声明。例如,要增加变量,这没关系:
SET @a = @a + 1;
对于其他语句,例如
SELECT
,您可能会得到结果 期待,但这不能保证。在以下声明中,您 可能会认为MySQL会首先评估@a然后做一个 第二个任务:SELECT @ a,@ a:= @ a + 1,...;
但是,涉及用户的表达式的评估顺序 变量未定义。
您对代码应该执行的操作的解释与文档直接矛盾。我建议您提出另一个问题,描述您要解决的问题,并包括样本数据和所需结果。