日別アーカイブ: 2016年7月8日

MySQLでフィールドの値を交換する

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`