裏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;

無事、カラムの入れ替えができるようになりました。