DBAtlas · Атлас эксплуатации баз данных

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 = ...;

Открыть в DBAtlas →

Ещё по этой СУБД