MySQL: используйте select в запросе на обновление - PullRequest
0 голосов
/ 24 мая 2019

У меня есть запрос:

update movies
    SET name = 'example'
    where id = (select MAX(id) from movies);

, и мне нужно обновить последнюю запись.

В настоящее время я получаю сообщение об ошибке:

. # 1093 - Выневозможно указать целевую таблицу 'movies' для обновления в предложении FROM

Ответы [ 2 ]

3 голосов
/ 24 мая 2019

В MySQL вы можете использовать order by и limit:

update movies
    set name = 'example'
    order by id desc
    limit 1;

MySQL имеет ограничение на запросы update и delete, когда он не позволяет ссылаться на таблицу, на которую ссылается таблица, в подзапросе в предложениях set или where.

Вы также можете выразить это, используя join:

update movies m join
       (select max(m2.id) from movies m2) m2
       on m2.max_id = m.id
    set m.name = 'example';

Но я считаю order by и limit более понятными.

0 голосов
/ 24 мая 2019

Вы можете вложить запрос:

select MAX(id) id from movies

внутри другого select:

update movies
SET name = 'example'
where id = (select t.id from (select MAX(id) id from movies) t);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...