Mise à jour des valeurs Oracle avec jointure
La mise à jour des tables à l'aide de jointures peut parfois entraîner des complexités. Un exemple dans lequel les utilisateurs rencontrent des exceptions est lorsqu'ils tentent de mettre à jour un montant à l'aide d'une jointure. Par exemple :
UPDATE tab1 SET tab1.total_adjusted_cost = tab1.total_adjusted_cost + t1.total FROM table1 tab1, (SELECT tab3.name, tab3.add, SUM(tab2.amount) AS total FROM table2 tab2, table3 tab3, table4 tab4 WHERE tab2.id = tab3.id AND tab3.id = tab4.id AND tab4.indicator = 'Y' GROUP BY tab3.name, tab3.add ) t1 WHERE tab1.id = t1.id;
L'exécution de cette requête peut entraîner l'erreur : "La commande SQL ne s'est pas correctement terminée."
Solution utilisant l'instruction de fusion
Pour résoudre ce problème, envisagez plutôt d'utiliser l'instruction de fusion :
merge into table1 tab1 using ( SELECT tab3.name, tab3."add", SUM(tab2.amount) AS total FROM table2 tab2, table3 tab3 , table4 tab4 WHERE tab2.id = tab3.id AND tab3.id = tab4.id AND tab4.indicator ='Y' GROUP BY tab3.name, tab3."add" )t1 on(tab1.id = t1.id) when matched then update set tab1.total_adjusted_cost = tab1.total_adjusted_cost + t1.total
L'instruction de fusion permet des mises à jour plus concises et efficaces. en combinant les instructions insert, update et delete en une seule opération.
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!