mysql update where select from update-target

MySQL не позволяет апдейтить таблицу, которая участвует в выборке условия select. То есть при попытке выполнить запрос типа

update categories set discount =  (select discount from categories where id=1)

Получим следующее сообщение об ошибке:
ERROR 1093 (HY000): You can't specify target table 'goods' for update in FROM clause

В документации по UPDATE находим простое объяснение - “Currently, you cannot update a table and select from the same table in a subquery.”

Как быть, если всё же требуется изменить записи в таблице, которая участвует в условии?
Конечно, вариант с ручным созданием временной таблицы будет работать, однако…

Статья на английском с примерами, а также интересные решения в комментариях по ссылке:
http://www.xaprb.com/blog/2006/06/23/how-to-select-from-an-update-target-in-mysql/

update webartCategories as cat     inner join
( [тут наш запрос на выборку] ) as x on cat.id = x.id
set level = level + 1

UPD - Ещё один запрос с подзапросом - UPDATE SELECT MIN MAX
upate user u inner join
(SELECT id_user, max(id_post) as maxid_post from post2user GROUP BY id_user) u2p
set u.lastpost = u2p.maxid_post

Метки:

Автор будет признателен, если Вы поделитесь ссылкой на статью, которая Вам помогла:
BB-код (для вставки на форум)

html-код (для вставки в ЖЖ, WP, blogger и на страницы сайта)

ссылка (для отправки по почте)

1 комментарий к записи “mysql update where select from update-target”

  1. John сообщает :

    Что ты несешь Лёвик :)

Добавить комментарий