Mysql
 sql >> Database >  >> RDS >> Mysql

Definire una variabile all'interno di select e usarla all'interno della stessa select

documentazione è abbastanza chiaro su questo:

Come regola generale, non dovresti mai assegnare un valore a una variabile utente e leggere il valore all'interno della stessa istruzione. Potresti ottenere i risultati che ti aspetti, ma questo non è garantito. L'ordine di valutazione per le espressioni che coinvolgono variabili utente non è definito e può cambiare in base agli elementi contenuti in una determinata istruzione; inoltre, non è garantito che questo ordine sia lo stesso tra le versioni di MySQL Server. In SELECT @a, @a:[email protected] +1, ..., potresti pensare che MySQL valuterà prima @a e poi eseguirà un compito secondo. Tuttavia, la modifica dell'istruzione (ad esempio aggiungendo una clausola GROUP BY, HAVING o ORDER BY) può far sì che MySQL selezioni un piano di esecuzione con un diverso ordine di valutazione.

Puoi fare quello che vuoi usando una sottoquery:

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