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

后端 未结 2 1998
粉色の甜心
粉色の甜心 2020-12-19 16:18

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          


        
相关标签:
2条回答
  • 2020-12-19 16:59

    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
    )
    
    0 讨论(0)
  • 2020-12-19 17:01

    It's because you're specifying the tasks table more than once. Try:

    DELETE FROM tasks
    USING deadlines
    WHERE deadlines.id = tasks.deadline_id
    AND DATE_ADD(tasks.created_at, INTERVAL deadlines.duration DAY) <= NOW()
    
    0 讨论(0)
提交回复
热议问题