2009-07-01 18 views
36

Ich versuche, Tabelle A mit Daten aus der Tabelle B zu aktualisieren, ich dachte, dass ich wie etwas tun könnte:Update mit zwei Tabellen?

UPDATE A 
SET A.name = B.name 
WHERE A.id = B.id 

aber leider, das funktioniert nicht.

Wer hat eine Idee, wie ich das machen kann?

Antwort

62

Ihre Abfrage funktioniert nicht, weil Sie keine FROM Klausel haben, die die Tabellen angibt, die Sie über A/B aliasieren.

Bitte versuchen Sie die Verwendung von folgenden: (! Nicht lachen)

UPDATE A 
    SET A.NAME = B.NAME 
FROM TableNameA A, TableNameB B 
WHERE A.ID = B.ID 

Persönlich bevorzuge ich explizite Syntax für Klarheit beitreten zu verwenden, dh

UPDATE A 
    SET A.NAME = B.NAME 
FROM TableNameA A 
    INNER JOIN TableName B ON 
     A.ID = B.ID 
+2

Ich weiß nicht, ob Sie den Alias ​​für in der SET-Klausel haben. Könnte von Ihrem Geschmack von SQL abhängen, aber ich glaube, da es ein gegeben ist, dass Sie "A" aktualisieren, dass es nicht erlaubt ist. –

14

Für Microsoft Access ...

+0

Die ausgewählte Antwort hat bei MariaDB nicht funktioniert. Dieser hat getan. Vielen Dank ! –

5

Ich kratzte mich am Kopf, nicht in der Lage, John Sansom Join-Syntax zu arbeiten, zumindest in MySQL 5.5.30 InnoDB.

Es stellt sich heraus, dass dies nicht funktioniert.

UPDATE A 
    SET A.x = 1 
FROM A INNER JOIN B 
     ON A.name = B.name 
WHERE A.x <> B.x 

Aber das funktioniert:

UPDATE A INNER JOIN B 
    ON A.name = B.name 
SET A.x = 1 
WHERE A.x <> B.x 
+2

Das Obige ist SQL-Server, nicht MySQL? – christiandev