Tabelle 1:
id name desc
-----------------------
1 a abc
2 b def
3 c adf
Tabelle 2:
id name desc
-----------------------
1 x 123
2 y 345
Wie führe ich in Oracle SQL eine sql update-Abfrage aus, die Tabelle 1 mit "Name" und "Description" von Tabelle 2 unter Verwendung derselben "ID" aktualisiert? Das Endergebnis würde also lauten
Tabelle 1:
id name desc
-----------------------
1 x 123
2 y 345
3 c adf
Die Frage stammt von https://stackoverflow.com/questions/5036918/sql-update-query-with-data-from-another-table, aber speziell für Oracle SQL.
Dies wird als korrelierte Aktualisierung bezeichnet.
UPDATE table1 t1
SET (name, desc) = (SELECT t2.name, t2.desc
FROM table2 t2
WHERE t1.id = t2.id)
WHERE EXISTS (
SELECT 1
FROM table2 t2
WHERE t1.id = t2.id )
Unter der Annahme, dass die Verknüpfung zu einer schlüsselgesicherten Ansicht führt, könnten Sie auch
UPDATE (SELECT t1.id,
t1.name name1,
t1.desc desc1,
t2.name name2,
t2.desc desc2
FROM table1 t1,
table2 t2
WHERE t1.id = t2.id)
SET name1 = name2,
desc1 = desc2
Hier scheint eine noch bessere Antwort mit 'in' Klausel zu sein, die mehrere Schlüssel für die Verbindung ermöglicht:
update fp_active set STATE='E',
LAST_DATE_MAJ = sysdate where (client,code) in (select (client,code) from fp_detail
where valid = 1) ...
Das vollständige Beispiel finden Sie hier: http://forums.devshed.com/oracle-development-96/how-to-update-from-two-tables-195893.html
Das Problem besteht darin, dass Sie die Spalten, die Sie als Schlüssel verwenden wollen, in der where-Klausel vor 'in' in Klammern setzen und die select-Anweisung mit denselben Spaltennamen in Klammern setzen. where (Spalte1,Spalte2) in ( select (Spalte1,Spalte2) from table where "die gewünschte Menge" );