orlov0562
@orlov0562
I'm cool!

Есть ли способ объявить переменную при использовании UPDATE и ORDER BY?

Привет,

Есть такая таблица
id
number


Надо выполнить такой вот запрос
UPDATE 
    tbl, 
    (select @cnt := 0) as cnt
SET 
    number=(@cnt:=@cnt+1)
ORDER BY id DESC


В этом виде, запрос приведет к ошибке, т.к.
For the multiple-table syntax, UPDATE updates rows in each table named in table_references that satisfy the conditions. In this case, ORDER BY and LIMIT cannot be used.


Какие еще есть способы объявить переменную в запросе, при условии что это должен быть именно один запрос?
  • Вопрос задан
  • 87 просмотров
Решения вопроса 2
@Vitsliputsli
Судя по поведению СУБД, функции (а по сути это CASE WHEN) вычисляются только один раз, отсюда и проблемы. Можно так:
UPDATE tbl SET
        number=(@cnt:=@cnt+1) 
    WHERE !@cnt:=0
    ORDER BY id DESC

запись ужасная, т.к. сразу не очевидно, что за чушь мы пишем в WHERE, но WHERE отрабатывает раньше, поэтому работает...
Ответ написан
bitniks
@bitniks
PHP/Go/Symfony developer
UPDATE tbl
SET number = (@cnt := @cnt + 1)
ORDER BY id DESC, @cnt := 0;
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
BojackHorseman
@BojackHorseman Куратор тега MySQL
...в творческом отпуске...
уберите инициализацию переменной из списка таблиц, чтобы избавиться от multiple-table syntax update
Ответ написан
Ваш ответ на вопрос

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

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