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;
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
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!