MySQL

MySQLのサブクエリを使ったupdateでERROR 1093が出る場合の対処方法

2017/05/31

hogeテーブルのserialカラムにある文字列「-」(全角ハイフン)を、「-」半角ハイフンに変換したいという場合に、同じテーブルをサブクエリ内に書くと、ERROR 1093 が出るので、その対策を備忘録としてポストします。

hogeテーブルのserialカラムにある文字列「-」(全角ハイフン)を、「-」半角ハイフンに変換したいという場合に、以下のようなSQLを書きました。

すると以下のようなエラーが出ます。

ERROR:1093というらしい。
エラーの理由は以下ページ。

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

要約すると、同じテーブルに対するサブクエリからのID指定などの操作は出来ないようです。

回避すべく調査したところ、サブクエリ内を別名にして受け取れば良いとのこと。
言葉にするとよく分かりませんでしたが、以下のようなSQLにすると通るようです。

分かったような、分からないような…。
とりあえず、備忘録にしておくべし。

-MySQL
-, , ,