【问题标题】:MySQL: You can't specify target table 'tasks' for update in FROM clauseMySQL:您不能在 FROM 子句中指定目标表“任务”进行更新
【发布时间】:2011-08-25 20:03:22
【问题描述】:

运行以下查询时出现 MySQL 错误“您无法在 FROM 子句中指定目标表 'tasks' 进行更新”:

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

我该如何管理?

谢谢!

【问题讨论】:

    标签: mysql sql mysql-error-1093


    【解决方案1】:

    您可以像这样将其包装在子查询中。问题是 MySQL 无法更新它也在查询的行。这将使 MySQL 隐式使用临时表来存储您要删除的 id。

    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
    )
    

    【讨论】:

      【解决方案2】:

      这是因为您多次指定任务表。试试:

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

      【讨论】:

      • 它说:“MULTI DELETE 中的未知表‘任务’”
      猜你喜欢
      • 2012-03-06
      • 1970-01-01
      • 2017-01-12
      • 2013-07-05
      • 2012-12-03
      • 1970-01-01
      • 2012-01-10
      • 2016-05-19
      • 2015-06-08
      相关资源
      最近更新 更多