@Sam, ваша точка отличная в концепции, но я думаю, что вы неправильно поняли, что говорят документы MySQL на ссылочной странице, или я неправильно понимаю :-) - и я просто хотел добавить это, чтобы, если кто-то чувствует себя некомфортно с ответом @ Даниэля, они будут более успокоиться или хотя бы немного углубиться.
Вы видите, что «@curRank: = @curRank + 1 AS rank» внутри SELECT не является «одним утверждением», , это одна «атомная» часть заявления, поэтому она должна быть безопасной.
В документе, к которому вы ссылаетесь, приводятся примеры, в которых одна и та же пользовательская переменная в 2 (атомных) частях инструкции, например, «SELECT @curRank, @curRank: = @curRank + 1 AS ранг ".
Можно утверждать, что @curRank используется дважды в ответе Даниэля: (1)« @curRank: = @curRank + 1 AS rank »и (2)« (SELECT @curRank : = 0) r ", но поскольку второе использование является частью предложения FROM, я уверен, что он будет оценен первым; что делает его вторым и предыдущим.
Фактически, на той же странице документов MySQL, на которую вы ссылались, вы увидите то же самое решение в комментариях - это может быть, где @Daniel получил это из; да, я знаю, что это комментарии, но это комментарии на официальной странице документов и которые несут некоторый вес.