在SELECT语句mysql中设置变量

时间:2015-03-02 06:01:56

标签: mysql

您好我想知道是否可以假设SELECT语句从左到右选择字段以确保构建语句是安全的以下(尝试使用尚未设置的变量并不好):

SELECT @variable := IFNULL(var, 0), value + @variable, somevalue, value2*@variable, ..., @variable/whatever...

FROM table1 LEFT JOIN table2 LEFT JOIN table3

我问这个问题的原因是因为使用LEFT JOINS可能因为某些元组中的var等于null(让我们假设var来自表3),我需要使用变量如你所见,我可以多次制作派生字段,所以我不想每次都使用IFNULL(var,0)。

1 个答案:

答案 0 :(得分:2)

来自the docs(强调我的):

  

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

SET @a = @a + 1;
  

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

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

然而,涉及用户的表达式的评估顺序   变量未定义

所以,如果我们按照这本书去,你问题的答案是