2017-04-03 71 views
0

是否可以使用同一表中的子查询进行更新?使用同一表中的子查询进行更新

我得到这个错误:

1093 - 您不能指定目标表 '任务' 的更新在FROM子句

update tasks SET completed_form = 'y' AND all_forms_in = 'y' where EID in (select EID from tasks WHERE completed_form = 'y' AND all_forms_in = 'n' group by EID having count(*) > 1); 

UPDATE

我发现,如果我包裹查询在另一个选择它的工作。由于此处引用:MySQL Error 1093 - Can't specify target table for update in FROM clause

update tasks SET all_forms_in = 'y' where EID in (SELECT * FROM (select EID from tasks WHERE completed_form = 'y' AND all_forms_in = 'n' group by EID having count(*) > 1)AS b); 

回答

0

MySQL支持加盟UPDATE语句,所以你可以做到这一点没有子查询。您必须加入两个不同的行,并填写完整标准以模拟计数(*)> 1.

UPDATE tasks AS t1 
INNER JOIN tasks AS t2 
    ON (t1.EID = t2.EID AND t2.completed_form = 'y' AND t2.all_forms_in = 'n') 
INNER JOIN tasks AS t3 
    ON (t1.EID = t3.EID AND t3.completed_form = 'y' AND t3.all_forms_in = 'n' 
    AND t2.primary_key <> t3.primary_key) 
SET t1.completed_form = 'y', 
    t1.all_forms_in = 'y';