2017-04-03 64 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';