Mysql
 sql >> база данни >  >> RDS >> Mysql

Размяна на стойности на колони в MySQL

Просто трябваше да се справя със същото и ще обобщя констатациите си.

  1. UPDATE table SET X=Y, Y=X подходът очевидно не работи, тъй като просто ще зададе и двете стойности на Y.

  2. Ето метод, който използва временна променлива. Благодаря на Антоний от коментарите на http://beerpla .net/2009/02/17/swapping-column-values-in-mysql/ за настройката "НЕ Е NULL". Без него заявката работи непредвидимо. Вижте схемата на таблицата в края на публикацията. Този метод не разменя стойностите, ако една от тях е NULL. Използвайте метод №3, който няма това ограничение.

    UPDATE swap_test SET x=y, [email protected] WHERE (@temp:=x) IS NOT NULL;

  3. Този метод беше предложен от Dipin отново в коментарите на http://beerpla.net/2009/02/17/swapping-column-values-in-mysql/ . Мисля, че това е най-елегантното и чисто решение. Работи както с NULL, така и с не-NULL стойности.

    UPDATE swap_test SET x=(@temp:=x), x = y, y = @temp;

  4. Друг подход, който измислих, изглежда работи:

    UPDATE swap_test s1, swap_test s2 SET s1.x=s1.y, s1.y=s2.x WHERE s1.id=s2.id;

По същество първата таблица е тази, която се актуализира, а втората се използва за изтегляне на старите данни от.
Обърнете внимание, че този подход изисква наличието на първичен ключ.

Това е моята тестова схема:

CREATE TABLE `swap_test` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `x` varchar(255) DEFAULT NULL,
  `y` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB;

INSERT INTO `swap_test` VALUES ('1', 'a', '10');
INSERT INTO `swap_test` VALUES ('2', NULL, '20');
INSERT INTO `swap_test` VALUES ('3', 'c', NULL);


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Топ 10 интересни факта и съвети за MySQL

  2. Ръководство за проектиране на база данни за система за управление на служители в MySQL

  3. Как да прекъсна операция INSERT в MySql тригер?

  4. Сравняване на времената за отказ на прокси сървъра на базата данни - ProxySQL, MaxScale и HAProxy

  5. MySQL Съхранена процедура с параметри