MySQLでは下記の通り同一テーブルupdateでのサブクエリは使用できないと書いていました。subquery.他のDBはどうなんだろう...考えられる方法ストアドプロシージャを使う一時テーブルを作る今回はストアドプロシージャを使いました。ストアドプロシージャ以下、自分向けのメモなのでコードと雑な解説だけ。書くと、カーソルでランダムに1,000件分のidを取得してそいつをグルグル回してアップデートしてます。ストアド本体1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253/*SQL区切り文字は通常;だが、ストアドだと複数のSQLを実行するので途中で;を使用することになる。途中で;を記述するとそこでストアドが終了することになる。そのためストアドの最後を;ではなく//と認識させるために初めにdelimiterを書く。updateした件数確認用。カーソル宣言と1,000件のidをランダムに取得。MySQLではたしかカーソル宣言時にしか取得できなかったはず。#コード'02000'(レコード無し)になるまで続行するようにする。fetchで取得した列の値を変数に格納する。最初のカーソルで複数列取得した場合はintoの後に格納先変数をカンマ区切りで順番に複数書く。実行結果を確認したい場合はプロシージャの引数にoutパラメータを設けて、ストアド実行後にselectを実行すればよい。RandomUpdate(@updated);#上記実行後に下記実行でupdateの件数を確認できる。replace的なのはないので、変更した場合は毎回dropする。RandomUpdate;エラー1175で実行できないときMySQLでは主キーを使用しない更新は標準で使用できないようになっているので一時的にはずす。YoshinoriN)。