So aktualisieren Sie eine Tabelle von einer anderen Tabelle

28

Ich habe eine Tabelle A hat Spalte (ID, Feld_1, Feld_2) und eine andere Tabelle B hat Spalte (ID, Feld_2)

Jetzt möchte ich Tabelle B mit A zusammenführen, das heißt, ich möchte Feld_2 in Tabelle A auf den Wert von Tabelle B aktualisieren. Wie implementiere ich das? Übrigens benutze ich Orakel

Vielen Dank

zjffdu
quelle
Enthalten beide Tabellen die gleiche Anzahl von Datensätzen?
ujjwalesri

Antworten:

29

Ein alternativer Ansatz für die zusammengehörige Unterabfrage (vorgeschlagen von Kerri) wäre die Verwendung der MERGE-Anweisung, die möglicherweise effizienter ist als die Unterauswahl (die nur anhand des Ausführungsplans beider Anweisungen überprüft werden kann).

MERGE INTO table_b 
USING 
(
  SELECT id,
         field_2
  FROM table_a
) ta ON (ta.id = table_b.id)
WHEN MATCHED THEN UPDATE 
    SET table_b.field_2 = ta.field_2
ein Pferd ohne Name
quelle
2
Die einzige Einschränkung für die MERGEAnweisung besteht darin, dass Sie die Spalte, für die sie verknüpft ist, nicht aktualisieren können, dh Sie können die in der ONKlausel verwendete Spalte nicht aktualisieren .
Lalit Kumar B
Dies funktionierte für mich und aktualisierte 2,5 Millionen Zeilen gegenüber dem Versuch, die Unterabfragemethode ORA-01555: snapshot too old
auszuführen,
15

Sie sind sich nicht ganz sicher, wonach Sie suchen, aber dies sollte einmalig oder kontinuierlich über einen geplanten Job funktionieren:

UPDATE table_a a
   SET field_2 = ( SELECT field_2
                     FROM table_b b
                    WHERE b.id = a.id )
;

Jetzt wird jedes Mal, wenn das oben genannte ausgeführt wird, dies für alle Zeilen in der Tabelle durchgeführt. Wenn Sie dies die ganze Zeit tun müssen, würde ich etwas anderes vorschlagen, aber für einen einmaligen oder sehr kleinen Tisch sollte es ausreichen.

Kerri Shotts
quelle
2

Ich habe dies erfolgreich mit einer Tabelle in Benutzer1 aus einer anderen Tabelle in Benutzer2 durchgeführt:

update user1.table1 a
set a.field1 = (
  select b.field1
  from user2.table2 b
  where a.field1=b.field1
)
where <condition for update user1.table1>
Siddik
quelle