Задать вопрос
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.


Какие еще есть способы объявить переменную в запросе, при условии что это должен быть именно один запрос?
  • Вопрос задан
  • 505 просмотров
Подписаться 1 Простой Комментировать
Помогут разобраться в теме Все курсы
  • Skillbox
    Java-разработчик
    8 месяцев
    Далее
  • Shultais Education
    Основы SQL
    3 месяца
    Далее
  • OTUS
    PHP Developer. Professional
    5 месяцев
    Далее
Решения вопроса 2
@Vitsliputsli
Судя по поведению СУБД, функции (а по сути это CASE WHEN) вычисляются только один раз, отсюда и проблемы. Можно так:
UPDATE tbl SET
        number=(@cnt:=@cnt+1) 
    WHERE !@cnt:=0
    ORDER BY id DESC

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

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

Похожие вопросы