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 进行更新”? [复制]