使用 select 语句更新多行

Update multiple rows using select statements

假设我有这些表和值:

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

Table2
------------------------
ID | Value
------------------------
 2 | bbbb
 4 | bbbb
 5 | bbbb

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

我知道我可以 运行 这个:

UPDATE Table2
SET Value = t1.Value
FROM Table2 t2
INNER JOIN Table1 t1 on t1.ID = t2.ID

但是如果Table1Table2实际上是select有条件的语句怎么办?如何修改 SQL 语句以将其考虑在内?

这就是在 Oracle 中通常执行此类更新查询的方式。 Oracle 没有 UPDATE FROM 选项:

UPDATE table2 t2
   SET t2.value = ( SELECT t1.value FROM table1 t1
                     WHERE t1.ID = t2.ID )
 WHERE EXISTS ( SELECT 1 FROM table1 t1
                 WHERE t1.ID = t2.ID );

WHERE EXISTS 子句将确保只有在 table1 中具有相应行的行被更新(否则 [=14= 中的每一行 ] 将更新;table1 中没有相应行的将更新为 NULL).