Maison >base de données >tutoriel mysql >Comment puis-je échanger les valeurs des colonnes dans MySQL sans renommer les colonnes ?

Comment puis-je échanger les valeurs des colonnes dans MySQL sans renommer les colonnes ?

Susan Sarandon
Susan Sarandonoriginal
2024-12-05 21:48:13364parcourir

How Can I Swap Column Values in MySQL Without Renaming Columns?

Échanger les valeurs de colonnes dans MySQL sans renommer

L'échange de valeurs entre les colonnes d'une table MySQL peut être une opération utile lorsque l'ordre des colonnes existantes n'est pas ne correspond plus à vos besoins. Cependant, modifier la structure de la table pour renommer les colonnes peut ne pas être réalisable en raison de restrictions d'autorisation.

Au lieu de cela, vous pouvez utiliser les techniques suivantes :

Méthode 1 : Utilisation d'une variable temporaire

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

Cette méthode utilise une variable temporaire pour conserver la valeur d'une colonne tout en mettant à jour l'autre. Cependant, il ne gère pas efficacement les valeurs NULL.

Méthode 2 : la solution élégante de Dipin

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

L'approche de Dipin échange élégamment les valeurs, fonctionnant aussi bien avec et sans Valeurs NULL.

Méthode 3 : Utiliser un Cross-Join

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

Cette méthode utilise une jointure croisée entre des tables identiques pour effectuer l'échange. Il nécessite qu'une clé primaire soit présente dans la table.

Exemple de schéma de table

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);

En choisissant la méthode la plus appropriée en fonction de la structure et des contraintes de votre table, vous pouvez échanger avec succès les valeurs des colonnes sans avoir besoin de renommer les colonnes ou d'escalader les autorisations.

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn