假设我有这些表和值:
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
但如果Table1
和Table2
实际上是带有条件的select语句,我该怎么办?如何修改SQL语句以将其考虑在内?
答案 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
)。