Oracle SQL:使用另一个表中的值更新表数据
数据库管理经常需要使用来自另一个表的值来更新一个表的数据。 让我们用两个示例表来说明这一点:
表 1:
<code>id name desc ----------------------- 1 a abc 2 b def 3 c adf</code>
表 2:
<code>id name desc ----------------------- 1 x 123 2 y 345</code>
我们的目标是使用 Table 1
中的数据更新 name
的 desc
和 Table 2
列,与 id
列匹配。期望的结果:
表 1(更新):
<code>id name desc ----------------------- 1 x 123 2 y 345 3 c adf</code>
Oracle SQL 为此类相关更新提供了有效的方法:
方法一:关联子查询
此方法在 UPDATE
语句中使用相关子查询:
<code class="language-sql">UPDATE table1 t1 SET (name, desc) = (SELECT t2.name, t2.desc FROM table2 t2 WHERE t1.id = t2.id) WHERE EXISTS ( SELECT 1 FROM table2 t2 WHERE t1.id = t2.id );</code>
此查询更新 Table 1
中的每一行,其中 id
中存在匹配的 Table 2
。
方法 2:使用通用表表达式 (CTE)
或者,如果连接创建了一个保留键的视图,CTE 提供了一个更干净的解决方案:
<code class="language-sql">UPDATE (SELECT t1.id, t1.name name1, t1.desc desc1, t2.name name2, t2.desc desc2 FROM table1 t1 JOIN table2 t2 ON t1.id = t2.id) SET name1 = name2, desc1 = desc2;</code>
此方法构造一个临时视图(使用 CTE),组合两个表中的相关字段,然后对此视图执行更新。
两种方法都可以根据 Table 1
中的数据有效更新 Table 2
,展示了 Oracle SQL 中数据操作的灵活技术。
以上是如何使用另一个表中的值更新 Oracle 表的数据?的详细内容。更多信息请关注PHP中文网其他相关文章!