@Urukhayy

Почему выдаёт ошибку — You can't specify target table 'table' for update in FROM clause?

UPDATE `table` SET Age=444,City=1,Street=1 WHERE ID = (SELECT ID FROM `table` WHERE City = 1 ORDER BY Street DESC,Time DESC LIMIT 1)
  • Вопрос задан
  • 25899 просмотров
Пригласить эксперта
Ответы на вопрос 4
IgorO2
@IgorO2
73
stackoverflow.com/questions/45494/mysql-error-1093...

как вариант можно выполнить такой запрос:

UPDATE 
`table` 

SET 
Age=444,City=1,Street=1 

WHERE ID = (SELECT a.ID FROM (SELECT ID FROM `table` WHERE City = 1 ORDER BY Street DESC,Time DESC LIMIT 1) as `a`)
Ответ написан
@Yago
Mysql блокирует запись в `table` при SELECT, из-за этого UPDATE не выполняется.
ramzes.ws/blog/cant-specify-target-table-for-updat...
Ответ написан
Комментировать
@kondaurov
Full stack developer
Видать динамические подзапросы не работают с update конструкцией в mysql. Тебе нужно создать временный результат подзапроса в какой нибудь таблице
Ответ написан
Комментировать
@ccstim
Оставив в стороне вопросы подводных камней,

замените _values на select _values from dual

например,
insert into _table (_fileds) values (_values)
замените на
insert into _table (_fileds) select _values from dual

и делайте в запросе все,что хотите, вплоть до групповых выборок из подзапросов
(к примеру, max+1 какого-нибудь поля из этой же таблицы)

аналогично с update
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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