Heim >Datenbank >MySQL-Tutorial >Wie aktualisiert man Oracle-Werte mithilfe von Joins effizient?

Wie aktualisiert man Oracle-Werte mithilfe von Joins effizient?

DDD
DDDOriginal
2024-12-24 14:03:10704Durchsuche

How to Efficiently Update Oracle Values Using Joins?

Oracle-Werte mit Join aktualisieren

Das Aktualisieren von Tabellen mithilfe von Joins kann manchmal zu Komplexitäten führen. Ein Beispiel dafür, dass Benutzer auf Ausnahmen stoßen, ist der Versuch, einen Betrag mithilfe eines Joins zu aktualisieren. Zum Beispiel:

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;

Das Ausführen dieser Abfrage kann zu folgendem Fehler führen: „SQL-Befehl nicht ordnungsgemäß beendet.“

Lösung mit Merge-Anweisung

Um dieses Problem zu beheben, sollten Sie stattdessen die Merge-Anweisung verwenden:

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

Die Merge-Anweisung ermöglicht präzisere und effizientere Aktualisierungen durch die Kombination der Anweisungen zum Einfügen, Aktualisieren und Löschen in einem einzigen Vorgang.

Das obige ist der detaillierte Inhalt vonWie aktualisiert man Oracle-Werte mithilfe von Joins effizient?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn