使用 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
但是如果Table1
和Table2
实际上是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
).
假设我有这些表和值:
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
但是如果Table1
和Table2
实际上是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
).