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.