Условия задачи: есть MySQL таблица table1. Используя только язык SQL запросов необходимо поменять местами значения из колонок value1 и value2. Структура таблицы имеет следующий вид:
CREATE TABLE `table1` (
`id` INT NOT NULL AUTO_INCREMENT ,
`value1` VARCHAR(50) NOT NULL DEFAULT '' ,
`value2` VARCHAR(50) NOT NULL DEFAULT '' ,
PRIMARY KEY (`id`) )
ENGINE = MyISAM;
Решение “в лоб”
Самым простым способом является явное переименование колонок таблицы. Данное решение самое простое в реализации и самое быстрое по результатам моих тестов.
ALTER TABLE `table1`
CHANGE `value1` `value2` VARCHAR(50) NOT NULL DEFAULT '' ,
CHANGE `value2` `value1` VARCHAR(50) NOT NULL DEFAULT '';
Решение с временной переменной
Изящное решение с использованием временной переменной для хранения промежуточного результата. По скорости оно уступает первому решению тем не менее показывает дополнительные скилзы в SQL.
UPDATE `table1` SET `value1`=(@temp:=`value1`), `value1` = `value2`, `value2` = @temp;
Решение с подзапросом
Поскольку MySQL не даст сделать простой UPDATE с выборкой из этой же таблицы, поэтому будем извращаться с ON DUPLICATE KEY UPDATE. Самое медленное из предложенных решений, но данный синтаксис предоставляет определенные преимущества в некоторых ситуациях.
INSERT INTO `table1`
SELECT * FROM `table1` `t2` ON DUPLICATE
KEY UPDATE `value1` = `t2`.`value2`, `value2` = `t2`.`value1`;