使用select语句更新多行

Ste*_*ven 16 sql t-sql sql-server sql-server-2008

我有这些表和值:

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


Table2
------------------------
ID | Value
------------------------
2 | bbbb
4 | bbbb
5 | bbbb
Run Code Online (Sandbox Code Playgroud)

我想使用Table1中的值及其各自的ID来更新Table2中的所有值.

有没有办法用简单的SQL查询来做到这一点?

use*_*147 37

运行选择以确保它是您想要的

SELECT t1.value AS NEWVALUEFROMTABLE1,t2.value AS OLDVALUETABLE2,*
FROM Table2 t2
INNER JOIN Table1 t1 on t1.ID = t2.ID
Run Code Online (Sandbox Code Playgroud)

更新

UPDATE Table2
SET Value = t1.Value
FROM Table2 t2
INNER JOIN Table1 t1 on t1.ID = t2.ID
Run Code Online (Sandbox Code Playgroud)

此外,考虑使用,BEGIN TRAN以便您可以在需要时将其回滚,但COMMIT在您满意时确保使用它.


Gor*_*off 9

如果两个表中都有id,则以下工作方式:

update table2
    set value = (select value from table1 where table1.id = table2.id)
Run Code Online (Sandbox Code Playgroud)

也许更好的方法是加入:

update table2
    set value = table1.value
    from table1
    where table1.id = table2.id
Run Code Online (Sandbox Code Playgroud)

请注意,此语法在SQL Server中有效,但在其他数据库中可能有所不同.