2009-07-01 109 views
36

我想更新從表B.數據表A,我想我可以做 類似:更新兩張表?

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

但很可惜,這是行不通的。

任何人都有我如何做到這一點的想法?

回答

62

由於您沒有子句指定您通過A/B進行別名的表,因此您的查詢不起作用。

請嘗試使用以下幾種:(!不要笑)

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

個人而言,我更喜歡使用的清晰更明確的聯接語法即

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

我不知道你是否能有別名SET子句。可能取決於你的SQL風格,但我相信因爲這是一個給定的更新「A」,它是不允許的。 – 2009-07-01 13:35:15

14

爲Microsoft Access ...

UPDATE TableA A 
    INNER JOIN TableB B 
    ON A.ID = B.ID 
SET A.Name = B.Name 
+0

所選答案在MariaDB上不適用於我。這一個。謝謝 ! – 2017-01-13 14:27:49

5

我在撓頭,無法獲得John Sansom的Join語法工作,至少在MySQL 5.5.30 InnoDB

事實證明,這是行不通的。

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

但這個工程:

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

以上是SQL-Server,不是MySQL? – christiandev 2013-09-02 15:07:10