Присвоение переменной с помощью mysql - PullRequest
0 голосов
/ 07 февраля 2011

Я использую присвоение переменной с помощью mysql и обнаружил странное поведение.

См. Этот запрос:

SET @v1=0;
SET @v2=0;

SELECT @v1, @v2 
FROM MyTable table 
WHERE (@v1:=@v2) is not null 
  AND (@v2:=2) is not null;

Я думал, что условия анализируются в следующем порядке: сначала (@v1:=@v2) is not nullи после (@v2:=2) is not null

и так должен быть результат:

@v1 | @v2
---------
 0  |  2

Но это не так.Попробуйте этот запрос, и вы получите:

@v1 | @v2
---------
 2  |  2

Почему?

Ответы [ 3 ]

1 голос
/ 07 февраля 2011

SQL - декларативный язык, поэтому вы не можете предполагать, что ваши условия оцениваются в том порядке, в котором вы их пишете.Вы сообщаете двигателю , что вы хотите, и он может определить, как получить его.

0 голосов
/ 07 февраля 2011

Оптимизатор запросов может свободно переписывать и выполнять ваш код любым удобным для него способом. НЕ полагайтесь на то, что он работает так, как вы ожидаете.

0 голосов
/ 07 февраля 2011

Оптимизатор не обязательно сохраняет порядок выражений в предложении WHERE таким же, как ваш запрос. Вы не можете зависеть от какого-либо конкретного порядка оценки

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...