sql >> Base de Datos >  >> RDS >> Mysql

Defina una variable dentro de la selección y utilícela dentro de la misma selección

MySQL documentación es bastante claro en esto:

Como regla general, nunca debe asignar un valor a una variable de usuario y leer el valor dentro de la misma declaración. Puede obtener los resultados que espera, pero esto no está garantizado. El orden de evaluación de las expresiones que involucran variables de usuario no está definido y puede cambiar en función de los elementos contenidos en una declaración dada; además, no se garantiza que este orden sea el mismo entre las versiones de MySQL Server. En SELECCIONE @a, @a:[email protected] +1, ..., podría pensar que MySQL evaluará @a primero y luego hará una asignación en segundo lugar. Sin embargo, cambiar la instrucción (por ejemplo, agregando una cláusula GROUP BY, HAVING u ORDER BY) puede hacer que MySQL seleccione un plan de ejecución con un orden de evaluación diferente.

Puedes hacer lo que quieras usando una subconsulta:

select @z, @z*2
from (SELECT @z:=sum(item)
      FROM TableA
     ) t;