2009-07-01 66 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