MySQL: вы не можете указать целевую таблицу 'tasks' для обновления в предложении FROM - PullRequest
4 голосов
/ 15 мая 2011

У меня ошибка MySQL «Вы не можете указать« задачи »целевой таблицы для обновления в предложении FROM» при выполнении следующего запроса:

DELETE FROM tasks
WHERE tasks.id IN 
(
SELECT tasks.id
FROM tasks 
    JOIN deadlines ON deadlines.id = deadline_id
WHERE DATE_ADD(tasks.created_at, INTERVAL deadlines.duration DAY) <= NOW()
)

Как мне это сделать?

Thanx!

Ответы [ 2 ]

10 голосов
/ 15 мая 2011

Вы можете заключить его в подзапрос, например, так.Проблема в том, что MySQL не может обновлять строки, которые он также запрашивает.Это заставит MySQL неявно использовать временную таблицу для хранения идентификаторов, которые вы хотите удалить.

DELETE FROM tasks
WHERE tasks.id IN 
(
SELECT id FROM
(
SELECT tasks.id
FROM tasks 
    JOIN deadlines ON deadlines.id = deadline_id
WHERE DATE_ADD(tasks.created_at, INTERVAL deadlines.duration DAY) <= NOW()
) AS taskstodelete
)
1 голос
/ 15 мая 2011

Это потому, что вы задаете таблицу задач более одного раза. Попробуйте:

DELETE FROM tasks
USING deadlines
WHERE deadlines.id = tasks.deadline_id
AND DATE_ADD(tasks.created_at, INTERVAL deadlines.duration DAY) <= NOW()
...