1093: Нельзя указывать целевую таблицу 'x' для обновления в предложении FROM
MySQLЧто это значит?
В операторе UPDATE или DELETE обновляемую/удаляемую таблицу нельзя напрямую использовать как источник в подзапросе (во FROM). MySQL не позволяет одной и той же таблице быть одновременно целью и источником таким образом.
Почему возникает?
Подзапрос напрямую читает ту же целевую таблицу, как в UPDATE my_table ... WHERE id IN (SELECT ... FROM my_table ...); подзапрос, ссылающийся на ту же таблицу в DELETE.
Как исправить
Оберните подзапрос в производную таблицу и дайте ей новый псевдоним, чтобы MySQL рассматривал её как отдельную копию: UPDATE my_table SET c = 1 WHERE id IN (SELECT id FROM (SELECT id FROM my_table WHERE condition) AS t); В качестве альтернативы запишите это как самосоединение: UPDATE my_table a JOIN my_table b ON ... SET a.c = ...;
Ещё по этой СУБД
- 1050Таблица уже существует
- 1051Неизвестная таблица 'x'
- 1091Невозможно выполнить DROP 'x'; проверьте, что столбец/ключ существует
- 1305PROCEDURE не существует
- 1227Доступ запрещён; требуется (хотя бы одна из) привилегия PRIVILEGE
- 3730Невозможно удалить таблицу, на которую ссылается ограничение внешнего ключа
- 2013Соединение с сервером MySQL потеряно во время запроса