2017-04-03 4 views
0

동일한 테이블의 하위 쿼리를 사용하여 업데이트 할 수 있습니까?동일한 테이블의 SubQuery로 업데이트

는이 오류 얻을 :

1093 - 내가 찾은

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

FROM 절에서 당신은 목표 테이블 '작업'을 지정할 수 없습니다 업데이트를 그 나는 쿼리를 포장하는 경우 다른 선택에서는 효과가있었습니다. 여기에 언급 된 바와 같이 : 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';