MySQL ドキュメント これについては非常に明確です:
原則として、ユーザー変数に値を割り当てたり、同じステートメント内で値を読み取ったりしないでください。期待どおりの結果が得られる場合がありますが、これは保証されていません。ユーザー変数を含む式の評価の順序は未定義であり、特定のステートメントに含まれる要素に基づいて変更される可能性があります。さらに、この順序は、MySQLサーバーのリリース間で同じであるとは限りません。 SELECT @a、@ a: [email protected] +1、...、MySQLが最初に@aを評価し、次に割り当てを実行すると考えるかもしれません。ただし、ステートメントを変更すると(たとえば、aGROUP BY、HAVING、またはORDER BY句を追加することにより)、MySQLが評価の順序が異なる実行プランを選択する可能性があります。
サブクエリを使用して、やりたいことができます:
select @z, @z*2
from (SELECT @z:=sum(item)
FROM TableA
) t;