wake-up-neo.net

Aktualisieren Sie mehrere Zeilen mit der Select-Anweisung

Ich habe folgende Tabellen und Werte:

Table1
------------------------
ID | Value
------------------------
2 | asdf
4 | fdsa
5 | aaaa


Table2
------------------------
ID | Value
------------------------
2 | bbbb
4 | bbbb
5 | bbbb

Ich möchte alle Werte in Tabelle2 mit den Werten in Tabelle1 mit ihren jeweiligen IDs aktualisieren.

Gibt es eine Möglichkeit, dies mit einer einfachen SQL-Abfrage zu tun?

16
Steven

Führen Sie eine Auswahl aus, um sicherzustellen, dass es Ihren Wünschen entspricht

SELECT t1.value AS NEWVALUEFROMTABLE1,t2.value AS OLDVALUETABLE2,*
FROM Table2 t2
INNER JOIN Table1 t1 on t1.ID = t2.ID

Aktualisieren

UPDATE Table2
SET Value = t1.Value
FROM Table2 t2
INNER JOIN Table1 t1 on t1.ID = t2.ID

Erwägen Sie auch die Verwendung von BEGIN TRAN, damit Sie ihn bei Bedarf zurücksetzen können. Stellen Sie jedoch sicher, dass Sie COMMIT verwenden, wenn Sie zufrieden sind.

35
user1166147

Wenn Sie in beiden Tabellen IDs haben, funktioniert Folgendes:

update table2
    set value = (select value from table1 where table1.id = table2.id)

Vielleicht ist ein besserer Ansatz ein Join:

update table2
    set value = table1.value
    from table1
    where table1.id = table2.id

Beachten Sie, dass diese Syntax in SQL Server funktioniert, sich aber in anderen Datenbanken unterscheiden kann.

8
Gordon Linoff

Sie können einen Alias ​​verwenden, um die Abfrage zu verbessern:

UPDATE t1
   SET t1.Value = t2.Value
  FROM table1 AS t1
         INNER JOIN 
       table2 AS t2
         ON t1.ID = t2.ID
2
rageit

Keine der obigen Antworten funktionierte für mich in MySQL , jedoch hat die folgende Abfrage funktioniert

UPDATE
    Table1 t1
    JOIN
    Table2 t2 ON t1.ID=t2.ID 
SET
    t1.value =t2.value
WHERE
    ...
2
Enayat Rajabi

Ich habe dieses auf MySQL, MS Access und SQL Server verwendet. Die ID-Felder sind die Felder, in denen die Tabellen übereinstimmen, nicht notwendigerweise der Primärindex.

UPDATE DestTable INNER JOIN SourceTable ON DestTable.idField = SourceTable.idField SET DestTable.Field1 = SourceTable.Field1, DestTable.Field2 = SourceTable.Field2...
0
Francisco R.