Mettre à jour la table à partir d'une autre table dans MySQL

Preet Sanghavi 29 mars 2022
Mettre à jour la table à partir d'une autre table dans MySQL

Dans ce tutoriel, nous visons à explorer comment mettre à jour les valeurs d’une table en fonction des entrées d’une autre table dans MySQL.

Souvent, il devient nécessaire pour les entreprises et les organisations de mettre constamment à jour les valeurs d’un tableau particulier. De plus, ces valeurs peuvent devoir être mises à jour en fonction des entrées d’une autre table. Cette autre table peut être liée à la table à mettre à jour sur la base d’une ou plusieurs colonnes.

Par exemple, considérons que nous avons deux tables. L’une est student_details et l’autre est student_ids. Ces deux tables ont une colonne commune appelée stu_firstName. Nous souhaitons mettre à jour la table student_ids avec le numéro d’identité des étudiants en utilisant les informations correspondantes de la table student_details. Ceci peut être fait à l’aide d’une clause UPDATE JOIN.

Comprenons comment cette méthode fonctionne.

Cependant, avant de commencer, nous créons un jeu de données factice avec lequel travailler. Ici, nous créons une table, student_details, avec quelques lignes dedans.

-- create the table student_details
CREATE TABLE student_details(
  stu_id int,
  stu_firstName varchar(255) DEFAULT NULL,
  stu_lastName varchar(255) DEFAULT NULL,
  primary key(stu_id)
);
-- insert rows to the table student_details
INSERT INTO student_details(stu_id,stu_firstName,stu_lastName) 
 VALUES(1,"Preet","Sanghavi"),
 (2,"Rich","John"),
 (3,"Veron","Brow"),
 (4,"Geo","Jos"),
 (5,"Hash","Shah"),
 (6,"Sachin","Parker"),
 (7,"David","Miller");

La requête ci-dessus crée une table avec des lignes contenant le prénom et le nom de l’étudiant. Afin de visualiser les entrées dans les données, nous utilisons le code suivant :

SELECT * FROM student_details;

Le code ci-dessus donnerait la sortie suivante :

stu_id	stu_firstName	stu_lastName
1	      Preet	        Sanghavi
2	      Rich	        John
3	      Veron	        Brow
4	      Geo	        Jos
5	      Hash	        Shah
6	      Sachin	    Parker
7	      David	        Miller

Essayons de créer une autre table nommée student_ids avec les colonnes stu_id et stu_firstName qui indiquent le numéro d’identité et les noms des étudiants. Nous pouvons le faire avec la requête suivante.

CREATE TABLE student_id(
  stu_id int,
  stu_firstName varchar(255) DEFAULT NULL
);

INSERT INTO student_id(stu_id, stu_firstName) 
 VALUES(1,"Preet"),
 (1,"Rich"),
 (1,"Veron"),
 (5,"Geo"),
 (5,"Hash"),
 (5,"Sachin"),
 (5,"David");

Nous pouvons visualiser ce tableau comme suit.

select * from student_id;

La sortie du code susmentionné peut être illustrée comme suit.

stu_id	stu_firstName
1		Preet
1		Rich
1		Veron
5		Geo
5		Hash
5		Sachin
5		David

Maintenant, essayons de mettre à jour la table student_id en utilisant la table student_details.

UPDATE JOIN dans MySQL

La syntaxe de base de la technique UPDATE JOIN peut être illustrée comme suit.

UPDATE table_2
INNER JOIN table_1 ON table_2.name = table_1.name
SET table_2.value = IF(table_1.value > 0, table_1.value, table_1.value)

Comme nous pouvons le voir, dans la requête susmentionnée, nous mettons à jour la valeur de value dans table_2 en fonction de la valeur de value dans table_1. Nous pouvons le faire avec la requête suivante.

UPDATE student_id
INNER JOIN student_details ON student_id.stu_firstName = student_details.stu_firstName
SET student_id.stu_id = student_details.stu_id;

Le code précité met à jour les valeurs de la colonne stu_id de la table student_id. La sortie du code susmentionné peut être illustrée comme suit.

stu_id	stu_firstName
1		Preet
2		Rich
3		Veron
4		Geo
5		Hash
6		Sachin
7		David

Comme nous pouvons le voir, le nom de la colonne stu_id est mis à jour en fonction des valeurs de la table student_details. Cette jointure est effectuée en utilisant le nom de table commun stu_firstName. Ces valeurs stu_firstName sont mises en correspondance pour les deux colonnes et la valeur correspondante de la colonne stu_id de la table student_details est reflétée dans la table student_id.

Une alternative à cette solution serait d’éviter l’utilisation de INNER JOIN et d’effectuer directement une jointure à l’aide de la clause WHERE ON. L’opération susmentionnée peut être effectuée avec cette technique comme suit.

UPDATE student_id
SET student_id.stu_id = (
	SELECT student_details.stu_id 
    from student_details
    WHERE student_details.stu_firstName = student_id.stu_firstName
);

Ici, comme nous pouvons le voir, la sortie du code susmentionné peut à nouveau être illustrée avec la commande SELECT * from student_id pour obtenir les résultats comme suit.

stu_id	stu_firstName
1		Preet
2		Rich
3		Veron
4		Geo
5		Hash
6		Sachin
7		David

Par conséquent, à l’aide de la technique UPDATE JOIN, nous pouvons mettre à jour efficacement une colonne d’une table en fonction des valeurs d’une autre table de MySQL.

Preet Sanghavi avatar Preet Sanghavi avatar

Preet writes his thoughts about programming in a simplified manner to help others learn better. With thorough research, his articles offer descriptive and easy to understand solutions.

LinkedIn GitHub

Article connexe - MySQL Query