Heim > Datenbank > MySQL-Tutorial > Wie aktualisiere ich eine Tabellenspalte mithilfe eines JOIN in Oracle SQL korrekt?

Wie aktualisiere ich eine Tabellenspalte mithilfe eines JOIN in Oracle SQL korrekt?

Susan Sarandon
Freigeben: 2024-12-22 13:48:10
Original
326 Leute haben es durchsucht

How to Correctly Update a Table Column Using a JOIN in Oracle SQL?

Oracle-Aktualisierungsabfrage mit JOIN

Beim Versuch, eine Spalte mit einer JOIN-Operation zu aktualisieren, ist eine Ausnahme aufgetreten: ORA-00933: SQL-Befehl nicht ordnungsgemäß beendet. Die folgende Abfrage veranschaulicht das Problem:

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;
Nach dem Login kopieren

Lösung

Um den Fehler zu beheben, sollte die Abfrage eine MERGE-Anweisung anstelle einer UPDATE-Anweisung mit einer Unterabfrage verwenden. Die MERGE-Anweisung ermöglicht sowohl eine Aktualisierungs- als auch eine Einfügeoperation in einer einzigen Anweisung. Die korrigierte Abfrage mit MERGE lautet:

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
Nach dem Login kopieren

Diese MERGE-Anweisung wertet die Zeilen aus Tabelle1 und der Unterabfrage t1 anhand der Join-Bedingung tab1.id = t1.id aus. Wenn eine Übereinstimmung gefunden wird, wird die Spalte „total_adjusted_cost“ in Tabelle 1 aktualisiert, indem der Gesamtwert aus der Unterabfrage hinzugefügt wird.

Das obige ist der detaillierte Inhalt vonWie aktualisiere ich eine Tabellenspalte mithilfe eines JOIN in Oracle SQL korrekt?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage