MySQLのエラー#1093 同じテーブルをサブクエリに使えない問題の対策

MySQL

ある時、MySQLでupdate文を実行しようとしたら、以下のエラーメッセージが出ました。

Error 1093 (ER_UPDATE_TABLE_USED)
SQLSTATE = HY000
Message = "You can't specify target table 't1'
for update in FROM clause"

このエラーは何なんでしょうか?

スポンサーリンク
スポンサーリンク

Error 1093 (ER_UPDATE_TABLE_USED) とは

どうやらこのエラーは、MySQLのみならず、データベースとしては、ごく普通の特性のようです。

MySQLのマニュアルには次の記述がありました。

以下のSQLは、

Error 1093 (ER_UPDATE_TABLE_USED)

となります。

理由は

サブクエリーは SELECT ステートメントだけでなく、UPDATE および DELETE ステートメント内でも正当であるため、UPDATE ステートメント内の割り当てのためにサブクエリーを使用できます。ただし、サブクエリーの FROM 句と更新のターゲットの両方に同じテーブル (この場合 t1) を使用することはできません。

です。

では、どうすれば、このエラーを回避できるのでしょうか。

Error 1093 (ER_UPDATE_TABLE_USED) の回避方法

SQLでは、サブクエリー内のFrom句はテンポラリテーブルとして扱うことが可能で、次のように書き換えれば動きます。

サブクエリー内のFromを

「SELECT MAX( code ) AS max_code FROM table WHERE type='A'」
というクエリで書き換えて、それをtemp1とか名前をつけてます。

おお。

これで、サブクエリ―出来ますね。

スポンサーリンク
スポンサーリンク
スポンサーリンク

フォローする