Oracle SQL : mise à jour des données d'une table à l'aide des valeurs d'une autre table
Fréquemment, la gestion de bases de données nécessite de mettre à jour les données d'une table avec des valeurs provenant d'une autre. Illustrons cela avec deux exemples de tableaux :
Tableau 1 :
<code>id name desc ----------------------- 1 a abc 2 b def 3 c adf</code>
Tableau 2 :
<code>id name desc ----------------------- 1 x 123 2 y 345</code>
Notre objectif est de mettre à jour les colonnes Table 1
et name
de desc
avec les données de Table 2
, correspondant à la colonne id
. Le résultat souhaité :
Tableau 1 (mis à jour) :
<code>id name desc ----------------------- 1 x 123 2 y 345 3 c adf</code>
Oracle SQL propose des méthodes efficaces pour ce type de mise à jour corrélée :
Méthode 1 : Sous-requête corrélée
Cette approche utilise une sous-requête corrélée dans l'instruction UPDATE
:
<code class="language-sql">UPDATE table1 t1 SET (name, desc) = (SELECT t2.name, t2.desc FROM table2 t2 WHERE t1.id = t2.id) WHERE EXISTS ( SELECT 1 FROM table2 t2 WHERE t1.id = t2.id );</code>
Cette requête met à jour chaque ligne dans Table 1
où un id
correspondant existe dans Table 2
.
Méthode 2 : Utiliser une expression de table commune (CTE)
Alternativement, si la jointure crée une vue avec clé conservée, un CTE fournit une solution plus propre :
<code class="language-sql">UPDATE (SELECT t1.id, t1.name name1, t1.desc desc1, t2.name name2, t2.desc desc2 FROM table1 t1 JOIN table2 t2 ON t1.id = t2.id) SET name1 = name2, desc1 = desc2;</code>
Cette méthode construit une vue temporaire (à l'aide d'un CTE) combinant les champs pertinents des deux tables, puis effectue la mise à jour sur cette vue.
Les deux méthodes mettent à jour efficacement Table 1
en fonction des données dans Table 2
, démontrant des techniques flexibles de manipulation des données dans Oracle SQL.
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!