Maison >base de données >tutoriel mysql >Comment mettre à jour efficacement les valeurs Oracle à l'aide de jointures ?

Comment mettre à jour efficacement les valeurs Oracle à l'aide de jointures ?

DDD
DDDoriginal
2024-12-24 14:03:10780parcourir

How to Efficiently Update Oracle Values Using Joins?

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn