2016-07-26 12 views
1

I Tabellenname merge_table haben wie:Wie aktualisieren oder Kopieren von Daten zwischen zwei Tabellen SQL

Employee_Number MINISTRY_CODE BRANCH_SECRETARIAT_CODE 

    12     333     30 
    13     222     31 

l den Wert von BRANCH_SECRETARIAT_CODE und fügen Sie ihn in verschiedenen Tabellen EMPLOYMENTS Look genannt kopieren möchten wie: und ENTITY_BRANCH hat null-Daten

EMPLOYEE_NUMBER JOINING_DATE  ENTITY_BRANCH 

    12    11/12/2006   null 
    13    01/11/2009   null 

so, jetzt will ich den Wert von BRANCH_SECRETARIAT_CODE von Tabelle1 table2 ENTITY_BRANCH für jeden Mitarbeiter nach seinem EMPLOYEE_NUMBER kopieren

+1

Welche DBMS verwenden Sie? –

Antwort

2

Sie können in Ihrer UPDATE-Anweisung mehrere Tabellen deklarieren und aus den Werten der anderen Tabelle angeben, welche Spalte der Tabelle aktualisiert werden soll.

In Ihrem Fall haben Sie nur zwei Tabellen so desto leichter ist es, eine implict jointure zu machen T1.Employee_Number = T2.Employee_Number mit:

UPDATE Table1 T1, Table2 T2 
SET T2.ENTITY_BRANCH = T1.BRANCH_SECRETARIAT_CODE 
WHERE T1.Employee_Number = T2.Employee_Number 

Ich vermuten, dies für SQL Server ist auch auf MySQL und Access, aber diese Anweisung UPDATE arbeiten. Bearbeiten Sie Ihre Frage, um das richtige RDBMS-Tag hinzuzufügen.

+1

Ich bin skeptisch, dass es sich um ANSI SQL handelt, also nehme ich an, dass das nicht das ist, was Sie eigentlich mit "dieser UPDATE-Anweisung wird auf jedem RDBMS funktionieren" gemeint haben. Jedenfalls bevorzuge ich die Verwendung von 'merge' in Fällen wie diesem: Ich weiß, dass es ANSI ist, und es ermöglicht die Verwendung von' Join's zwischen Quelle und Ziel (und zwischen mehreren Tabellenquellen). –

+0

@a_horse_with_no_name Woher liest du, dass es Standard Ansi ist? Ich habe angegeben, dass es auf jedem RDBMS funktionieren sollte, aber in der Tat hätte ich stattdessen "die meisten" sagen sollen. Es funktioniert auf Oracle, SQL Server, Access, MySQL und vielen anderen. Anpassung sowieso. –

+1

Es funktioniert nicht mit "Most" DBMS. Es funktioniert nicht mit Oracle, Postgres, DB2, Firebird, SAP HANA, HSQLDB, H2, Apache Derby, Informix, Vertica. –

1

Verwenden Sie die ANSI-Norm des merge statement, die zur Anpassung Quell- und Zieltabellen besser join -Stil Syntax bietet, unterstützt komplexe Quelle Klauseln unterstützt insert zu s usw.

merge into EMPLOYMENTS -- destination table 
using Merge_table  -- source table, or nested subquery, CTE, etc. 
on Merge_table Employee_Number = EMPLOYMENTS.EMPLOYEE_NUMBER 
    -- any other criteria to determine which destination rows to affect 
    -- e.g.: and EMPLOYMENTS.EMPLOYEE_NUMBER is null 
-- when not matched then 
--  [...] 
when matched then 
    update 
    set EMPLOYMENTS.ENTITY_BRANCH = Merge_table.BRANCH_SECRETARIAT_CODE; 
+0

l versuchen dann, ich habe diesen Fehler ORA-00969: fehlt ON Schlüsselwort – ghalib

+0

Also bearbeiten Sie Ihre Frage zu markieren, die vermutlich nicht-ANSI-konform, DBMS Sie verwenden. Ansonsten raten die Leute im Dunkeln - was sinnlos ist. Aber da Sie nur 'sql' getaggt haben, sind wir in unserem Recht, anzunehmen, dass Sie eine hypothetische standardisierte Lösung wollen, unabhängig davon, wie viele DBMSs die Compliance aussparen. Dein ist vermutlich ORAcle. Ich weiß nicht, worüber es sich beschwert: da ist ein 'on' genau da. Hast du es so wie es ist ausgeführt? Vielleicht entfernen Sie die Kommentare. Ich weiß nicht. Hat Oracle DBMS _really_ keine besseren Fehlermeldungen als das? Wäre eine Zeilennummer zu viel gefragt? –

Verwandte Themen