MySQLでフィールドの値を入れ替える方法

IIDX クリアチェッカー
この弐寺サイトを立ち上げる前、楽曲のデータを収集してデータベース(MySQL)に保存したのだけど、その時DBへ発行するSQL文をミスっていた。
SQL文をミスっていたというよりも、取得したデータの加工をミスった。そのため曲にBPM変化がある曲はBPMの上と下が逆になってた(変化ない曲は問題なし)。これは間違って入れてしまったBPMのMAX、MINのデータを入れ替える必要がある。
最初直そうと思った時すぐにSQL文が思い浮かばなかったんでPHPでデータ取得して入れ替えようと思ったけど、やっぱスマートじゃない。SQL文ひとつ発行するだけでポンと直したい。
SQL文でフィールドの値を入れ替える時、まぁユーザー変数使うよなとは思うんだけど、退避の仕方が分からない。入れ替えするレコードが一つしかないのであればできそうだけど、複数ある場合はどうすりゃいいのかと。
調べてみたらあった。ユーザー変数使えること知ってるなら頭を捻れば出てくるやり方だ。
裏MySQLクエリー入門(19) 応用編5 UPDATE文でカラムの値を入れ替えたい - イノベートな非日常
fooとbarというフィールドの値を入れ替えたいときはこんな感じ。一文でやりたいけどユーザー変数定義してるから二文。

set @hoge = 0;
update `hoge_tbl` set
`foo` = (@hoge:=`foo`)*0+`bar`,
`bar` = @hoge
where `foo` < `bar`;

「@hoge:=foo」でfooの内容をユーザー変数に退避、その後@hogeに「*0」をして値を0にし、それにbarを足して(0を加算なんで値は変わらない)fooへ代入。そしてbarには退避したfooの値を代入。これでfooとbarの値を入れ替えることができた!
最初「(@hoge:=`foo`)*0+`bar`」が意味分かんなかった。何だこの構文(^q^)ってなったけど「:=」がユーザー変数への代入って分かればあとは式のとおり。よく見れば何も難しくないSQL文だった。

うーん。自分でこういうの思いつきたいなぁ。

参考:http://dev.mysql.com/doc/refman/4.1/ja/variables.html