Advent Calendar 21日目 MySQL において1つのクエリでカラムの値を入れ替える方法
たぶん滅多に使うことはないと思うけれども、必要になって調べたことがあったので掲載。
sample table
CREATE TABLE `sample` ( `id` int(10) unsigned NOT NULL auto_increment, `a` int(10) default NULL, `b` int(10) default NULL, PRIMARY KEY (`id`) );
mysql> select * from sample; +----+------+------+ | id | a | b | +----+------+------+ | 1 | 1 | 2 | | 2 | 3 | 4 | | 3 | 5 | 6 | | 4 | 7 | 8 | | 5 | 9 | 10 | +----+------+------+ 5 rows in set (0.00 sec)
例えばこんなテーブルがあった時、
カラム a と カラム b の値を入れ替えたい場合は、以下のようなクエリを発行すればいい。
入れ替えクエリ
UPDATE sample SET a = IF((@tmp:=a), b, b), b = @tmp;
実行結果
mysql> UPDATE sample SET a = IF((@tmp:=a), b, b), b = @tmp; Query OK, 5 rows affected (0.02 sec) Rows matched: 5 Changed: 5 Warnings: 0 mysql> select * from sample; +----+------+------+ | id | a | b | +----+------+------+ | 1 | 2 | 1 | | 2 | 4 | 3 | | 3 | 6 | 5 | | 4 | 8 | 7 | | 5 | 10 | 9 | +----+------+------+ 5 rows in set (0.00 sec)
あれ? このネタの方がカジュアルじゃなかった!?