Maison >base de données >tutoriel mysql >Comment puis-je mettre à jour les valeurs des colonnes d'une table en fonction des valeurs d'une autre table ?
Mise à jour des colonnes d'un tableau à l'aide des données d'un autre tableau
Ce guide montre comment mettre à jour les valeurs des colonnes dans une table de base de données à l'aide des données d'une autre, en supposant que les deux tables partagent un champ commun pour les enregistrements correspondants. Considérons deux tables, tableA
et tableB
, avec des structures similaires :
id | name | value |
---|---|---|
1 | Joe | 22 |
2 | Derk | 30 |
Notre objectif est de mettre à jour la colonne value
dans tableB
avec les valeurs correspondantes de tableA
, en faisant correspondre les lignes basées sur la colonne name
.
Méthode 1 : Utiliser une sous-requête
L'approche la plus simple implique une instruction UPDATE
avec une sous-requête :
<code class="language-sql">UPDATE tableB SET value = (SELECT value FROM tableA WHERE tableA.name = tableB.name) WHERE EXISTS (SELECT 1 FROM tableA WHERE tableA.name = tableB.name);</code>
Cette déclaration met à jour tableB.value
avec le value
de tableA
là où les champs name
correspondent. La clause WHERE EXISTS
garantit que seules les lignes dont les noms correspondent dans les deux tables sont mises à jour, évitant ainsi les erreurs si un nom existe dans tableB
mais pas dans tableA
.
Méthode 2 : Utiliser un JOIN
Une méthode plus flexible utilise un INNER JOIN
pour une correspondance efficace :
<code class="language-sql">UPDATE tableB INNER JOIN tableA ON tableB.name = tableA.name SET tableB.value = tableA.value;</code>
Cette approche rejoint directement tableB
et tableA
sur la colonne name
et met à jour tableB.value
avec tableA.value
pour chaque ligne correspondante. C'est généralement plus rapide que d'utiliser une sous-requête.
Méthode 3 : Mise à jour conditionnelle avec JOIN
Pour les mises à jour conditionnelles, où vous souhaiterez peut-être mettre à jour uniquement dans certaines circonstances, utilisez une instruction IF
ou CASE
dans la clause SET
:
<code class="language-sql">UPDATE tableB INNER JOIN tableA ON tableB.name = tableA.name SET tableB.value = IF(tableA.value > 0, tableA.value, tableB.value) WHERE tableA.name = 'Joe';</code>
Cet exemple met à jour tableB.value
uniquement si tableA.value
est supérieur à 0, et uniquement pour les lignes où tableA.name
est « Joe ». Vous pouvez adapter la condition IF
ou CASE
en fonction de vos besoins spécifiques. N'oubliez pas de remplacer 'Joe'
par la condition appropriée à votre cas d'utilisation.
Choisissez la méthode qui correspond le mieux à vos besoins. La méthode 2 (utilisant JOIN
) est généralement préférée pour son efficacité et sa lisibilité, tandis que la méthode 3 offre un meilleur contrôle sur le processus de mise à jour. Sauvegardez toujours vos données avant d’exécuter des UPDATE
instructions.
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!