裏MySQLクエリー入門(19) 応用編5 UPDATE文でカラムの値を入れ替えたい
CSVのインポートなどでカラム(列)の順番を間違ってしまったときなどに以下のようなSQLで値を入れ替えることができそうですが、
set @str = 0; update `charactor` set `str` = `grd`, `grd` = `int`, `int` = `agi`, `agi` = `dex`, `dex` = `vit`, `vit` = `str`;
実際に実行してみると、最後のカラムが`grd`の値になってしまってうまく動きません。というのはUPDATE文の実行時に左のカラムから順次処理されるので、最初のカラムの処理で、`str`の値が`grd`の値に置き換わってしまった為、最後のカラムの処理で`vit`に`str`の値を代入するときには、元の`str`の値がなくなってしまっていて、`grd`の値になってしまっているというわけです。そこで、以下のように`str`に値を代入する前にユーザ変数に`str`の値を保存しておくことで
set @str = 0; update `charactor` set `str` = (@str:=`str`)*0+`grd`, `grd` = `int`, `int` = `agi`, `agi` = `dex`, `dex` = `vit`, `vit` = @str;
無事、カラムの入れ替えができるようになりました。