Sql 使用select语句更新多行

Sql 使用select语句更新多行,sql,oracle,Sql,Oracle,假设我有这些表和值: Table1 ------------------------ ID | Value ------------------------ 2 | asdf 4 | fdsa 5 | aaaa Table2 ------------------------ ID | Value ------------------------ 2 | bbbb 4 | bbbb 5 | bbbb 我想使用表1中的值及其各自的ID更新表2中的所有值 我知道我可以运行这个: UPD

假设我有这些表和值:

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

Table2
------------------------
ID | Value
------------------------
 2 | bbbb
 4 | bbbb
 5 | bbbb
我想使用
表1
中的值及其各自的ID更新
表2中的所有值

我知道我可以运行这个:

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

但是,如果
Table1
Table2
实际上是带条件的select语句,我该怎么办?如何修改SQL语句以考虑到这一点?

这是Oracle中通常执行此类更新查询的方式。Oracle没有“更新自”
选项:

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
中具有相应行的行(否则将更新
table2
中的每一行;
table1
中没有相应行的行将更新为
NULL
).

使用联接将两条Select语句与
Table2
关联,然后在
Table2