使用select语句更新多行

时间:2015-01-28 21:49:19

标签: sql oracle

假设我有这些表和值:

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

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

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

我知道我可以运行这个:

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

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

1 个答案:

答案 0 :(得分:0)

这就是通常在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中具有相应行的行(否则 table2中的每一行将被更新; table1中没有相应行的内容将更新为NULL)。