2014年9月9日火曜日

MySQLでERROR:1093を回避する

まー些細なことなんですけどね。

エラーになる(as tmpが意味をなしてない)
update hoge set code = 0
where id IN 
(select id from hoge as tmp where id = 1 group by id  order by id)
;

こんなエラー
ERROR 1093 (HY000): You can't specify target table 'hoge' for update in 
FROM clause
mysqlって同じテーブルに対するサブクエリからの操作ができないんですよね。

リファレンスマニュアルより
http://dev.mysql.com/doc/refman/5.1/ja/subquery-errors.html

サブクエリは、SELECT ステートメント同様 UPDATE と DELETE ステートメント内で正当なので、UPDATE ステートメント内で、割り当ての為にサブクエリを利用する事ができます。しかし、同じテーブルを(この場合、テーブル t1)サブクエリの FROM 条項と更新ターゲットの両方に対して利用する事はできません。

ではどうするかというと、いっこ別に fromでtmpを受け取ってあげれば実はOK

うまくいく
update hoge set code = 0
where id IN (
select id from 
(select id from hoge where id = 1 group by id  order by id) as tmp
)
;

0 件のコメント:

コメントを投稿