2017-04-03 8 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文でJOINをサポートしていますので、あなたは、サブクエリなしでこれを行うことができます。完了した基準で2つの異なる行に参加して数(*)> 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'; 
関連する問題