MySQL:您不能在 FROM 子句中指定目标表“任务”进行更新

Posted

技术标签:

【中文标题】MySQL:您不能在 FROM 子句中指定目标表“任务”进行更新【英文标题】:MySQL: You can't specify target table 'tasks' for update in FROM clause 【发布时间】: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()
)

我该如何管理?

谢谢!

【问题讨论】:

【参考方案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 中的未知表‘任务’”

以上是关于MySQL:您不能在 FROM 子句中指定目标表“任务”进行更新的主要内容,如果未能解决你的问题,请参考以下文章

MySQL 错误您不能在 FROM 子句中指定要更新的目标表

如何解决 MySQL 错误“您不能在 FROM 子句中指定目标表 X 进行更新”? [复制]

您不能在 FROM 子句中指定要更新的目标表

mysql - 您不能在 FROM 子句中指定要更新的目标表(我的查询有效,但不是等效更新)

更新查询“您不能在FROM子句中指定目标表'a'进行更新”

ERROR 1093 (HY000): 您不能在 FROM 子句中指定要更新的目标表