用两个表更新?

Md *_*din 44 sql sql-server

我试图用表B中的数据更新表A.我想我可以做类似的事情:

 UPDATE A
 SET A.name = B.name
 WHERE A.id = B.id
Run Code Online (Sandbox Code Playgroud)

但是,这不起作用.

任何人都知道如何做到这一点?

Joh*_*som 76

您的查询不起作用,因为您没有FROM子句来指定通过A/B存在别名的表.

请尝试使用以下内容:

UPDATE A
    SET A.NAME = B.NAME
FROM TableNameA A, TableNameB B
WHERE A.ID = B.ID
Run Code Online (Sandbox Code Playgroud)

就个人而言,我更喜欢使用更明确的连接语法,即

UPDATE A
    SET A.NAME = B.NAME
FROM TableNameA A
    INNER JOIN TableName B ON 
        A.ID = B.ID
Run Code Online (Sandbox Code Playgroud)

  • 我不知道你是否可以在SET子句中拥有别名.可能取决于你的SQL风格,但我相信,因为它是一个给定的你正在更新"A",它是不允许的. (2认同)

Nic*_*las 18

对于Microsoft Access(不要笑!)......

UPDATE TableA A
    INNER JOIN TableB B
    ON A.ID = B.ID
SET A.Name = B.Name
Run Code Online (Sandbox Code Playgroud)


gus*_*gus 9

我正在挠头,无法获得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
Run Code Online (Sandbox Code Playgroud)

但这有效:

UPDATE A INNER JOIN B 
    ON A.name = B.name
SET A.x = 1
WHERE A.x <> B.x
Run Code Online (Sandbox Code Playgroud)

  • 以上是SQL-Server,而不是MySQL? (4认同)