Модераторы: skyboy
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> WHERE SELECT() внутри UPDATE, you can't specify target table 
V
    Опции темы
Zamuta
Дата 5.10.2007, 19:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 389
Регистрация: 18.1.2006

Репутация: нет
Всего: 6



Пытаюсь сделать следующее:
Код

UPDATE `stat` SET `result` = 300  WHERE `id` = (SELECT MAX(`id`) FROM `stat` WHERE `uid` = 5 AND `column1` = 'param1' AND `column2` = 10 AND `result_no` = 3 )  ;


Говорит you can't specify target table 'stat' for update in FROM clause.

Элементарно не работает:
Код

UPDATE `stat` SET `result` = 20 WHERE `id` = (SELECT MAX(`id`) FROM `stat`);


или 

Код

UPDATE `stat` SET `result` = 20 WHERE `id` = MAX(`id`) ;


id - primary auto inc.
Нужно именно по MAX(id) обновить.

MySQL 5.0.41 . 

Это сообщение отредактировал(а) Zamuta - 6.10.2007, 10:57


--------------------
Thank you opensource.
PM MAIL ICQ   Вверх
Zamuta
Дата 7.10.2007, 14:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 389
Регистрация: 18.1.2006

Репутация: нет
Всего: 6



Получилось вот так:

Код

UPDATE `stat`, (SELECT MAX(`id`) AS xid from `stat` where `column1` = 'param' and `column2` = 10 and `column3` = 2 GROUP BY id DESC LIMIT 1) d SET `result` = 222 where `id` = d.xid


Но как - то криво. Может другие варианты есть?


--------------------
Thank you opensource.
PM MAIL ICQ   Вверх
comcon1
Дата 9.10.2007, 10:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 838
Регистрация: 11.6.2005
Где: Москва ДАС-МГУ

Репутация: нет
Всего: 17



Попробовал сам. Пишет ошибку 1093:
Код

You can't specify target table '%s' for update in FROM clause

Нельзя выбирать where из таблицы, которую сам же изменяешь. Видимо это может привести к какому то переполнению стека и => уязвимости майскл.
решение ты уже написал сам:
Код

UPDATE `stat`, (SELECT max(id) as xid from stat) d SET `result` = 20 WHERE `id` = d.xid;



--------------------
PM MAIL   Вверх
nistelroi
Дата 23.6.2014, 01:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 23.6.2014

Репутация: нет
Всего: нет



Есть еще один способ обойти ошибку, переделать внутренний селект как SELECT FROM SELECT

Это сообщение отредактировал(а) nistelroi - 24.7.2014, 00:37
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MySQL | Следующая тема »


 




[ Время генерации скрипта: 0.0428 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.