@zim32

Mysql. Почему так присходит?

Добрый день. Подскажите. Почему так происходит?

SET @foo:=0;
SELECT @foo FROM test t1 LEFT JOIN test t2 ON t2.id=t1.id AND (@foo:=@foo+1);

Выводит 0,0,0,0,0,0,0…

а при

SET @foo:=0;
SELECT @foo FROM test t1 JOIN test t2 ON t2.id=t1.id AND (@foo:=@foo+1);

выводит 1,2,3,4,5,6…
  • Вопрос задан
  • 2612 просмотров
Пригласить эксперта
Ответы на вопрос 3
Riateche
@Riateche
Ваш запрос выводит значения переменной @foo. В первом случае ее значение всегда равно 0 и не изменяется, поэтому выводятся нули. Во втором случае при обработке каждой строки выполняется проверка условия, а в нем стоит присвоение нового значения переменной @foo. Поэтому в каждой следующей строке значение @foo становится на единицу больше.
Ответ написан
lashtal
@lashtal
Уточню: переменная foo не должна находиться в условии джоина.
Надо: SELECT @foo := @foo + 1 FROM test t1 LEFT JOIN test t2 ON t2.id = t1.id
Ответ написан
@1x1
Одновременное чтение и присвоение переменной в рамках одного запроса не рекомендуется, в мануале это (весьма мягко) описано. Всё ещё веселее, может срабатывать даже выражение вроде @a>0 and @a<0
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы