Maison >base de données >tutoriel mysql >Comment échanger efficacement les valeurs des colonnes dans MySQL sans modifier la structure de la table ?
Échanger les valeurs de colonne dans MySQL sans modifier la structure de la table
Comme vous l'avez mentionné, utiliser UPDATE pour échanger les valeurs de colonne avec un simple SET X=Y , Y=X ne donnera pas le résultat souhaité. Cependant, il existe plusieurs approches alternatives que vous pouvez envisager, en fonction de vos données et des limitations d'autorisation.
Méthode 1 : Variable temporaire avec vérification IS NOT NULL
Cette méthode utilise une variable temporaire pour conserver la valeur d'une colonne tout en l'échangeant avec l'autre. Cependant, cela ne fonctionne que lorsque les deux valeurs sont non NULL.
UPDATE swap_test SET x=y, y=@temp WHERE (@temp:=x) IS NOT NULL;
Méthode 2 : Variable temporaire sans vérification IS NOT NULL
Une méthode plus polyvalente qui gère valeurs NULL et non NULL :
UPDATE swap_test SET x=(@temp:=x), x = y, y = @temp;
Méthode 3 : double table Mettre à jour
Une autre méthode consiste à utiliser une deuxième table pour échanger les valeurs. Cela nécessite la présence d'une clé primaire :
UPDATE swap_test s1, swap_test s2 SET s1.x=s1.y, s1.y=s2.x WHERE s1.id=s2.id;
Exemple de test
Utilisation du schéma de test fourni :
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);
Application de la méthode 2 devrait réussir à échanger le valeurs :
UPDATE swap_test SET x=(@temp:=x), x = y, y = @temp;
Sortie :
id x y 1 10 a 2 20 NULL 3 NULL c
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!