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

データベース
スポンサーリンク

ある時、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とか名前をつけてます。

 

 

おお。

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

 

 

 

 

 

 

コメント