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
Libérer: 2024-12-24 14:03:10
original
694 Les gens l'ont consulté

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;
Copier après la connexion

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
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal