2011-05-15 100 views
4

我有MySQL错误“您不能指定目标表‘任务’在FROM子句更新”运行下面的查询:MySQL的:你不能指定目标表“任务”的更新在FROM子句

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

我该如何管理?

Thanx!

回答

10

你可以把它包装在像这样的子查询中。问题是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 
) 
+0

它的工作原理 - 谢谢! – ohavryl 2011-05-15 09:58:30

1

这是因为你不止一次地指定了任务表。试试:

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

它说:“MULTI DELETE中的未知表格任务” – ohavryl 2011-05-15 09:57:23

+0

无论如何谢谢! – ohavryl 2011-05-15 09:58:48

相关问题