Search code examples
mysqlsqlmysql-error-1093

MySQL: You can't specify target table 'tasks' for update in FROM clause


I have got MySQL error "You can't specify target table 'tasks' for update in FROM clause" running the following query:

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()
)

How can I manage this?

Thanx!


Solution

  • You can wrap it in a subquery like so. The issue is that MySQL can't update rows that it's also querying. This will make MySQL use a temporary table implicitly to store the ids you want to delete.

    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
    )