MySQLでフィールドの値を入れ替えるのに失敗したので、
備忘録を兼ねて交換する方法を書きます。
まず間違ったクエリですが、以下のようなクエリはSQLServerでは大丈夫ですが、
MySQLでは処理順の都合で結果としてXもYもどちらもYの値で更新されます。
UPDATE `table` SET `X`=`Y`, `Y`=`X`;
なので、ユーザ変数を利用して以下のようなクエリにします。
SET @temp = 0;
UPDATE `table` SET `X` = (@temp:=`X`) * 0 + `Y`, `Y` = @temp;
こうすることで以下のように処理されるので、値の交換ができます。
// ユーザ変数@tempに`X`が代入される。
(@temp:=`X`)
// Xの値を0にしてYを加算することでYの値でXを更新される
`X` = (@temp:=`X`) * 0 + `Y`
// Yの値をユーザ変数@temp=`X`の値で更新される
`Y` = @temp
交換する項目が数値型以外の場合は、
以下の個所を型に併せた形に書き換えれば対応できます。
(@temp:=`X`) * 0 + `Y`