而另一个表B有列(id,field_2)
现在我想将表B合并到A,这意味着我想将表A中的field_2更新为表B的值。那么如何实现呢?顺便说一句,我正在使用oracle
感谢
#1 楼
共同相关的子查询(由Kerri建议)的另一种方法是使用MERGE语句,该语句可能比子选择更有效(只能通过查看两个语句的执行计划进行验证)。MERGE INTO table_b
USING
(
SELECT id,
field_2
FROM table_a
) ta ON (ta.id = table_b.id)
WHEN MATCHED THEN UPDATE
SET table_b.field_2 = ta.field_2
评论
对MERGE语句的唯一限制是您不能更新它所连接的列,即,您不能更新ON子句中使用的列。
– Lalit Kumar B
2015年11月4日在7:08
这对我有用,更新了250万行,而尝试使用子查询方法可能要花45分钟才能出现ORA-01555错误:快照太旧
–helmy
18年1月17日,2:13
#2 楼
不确定是否要完成此任务,但这应该是一次性的,也可以通过计划的作业连续进行:UPDATE table_a a
SET field_2 = ( SELECT field_2
FROM table_b b
WHERE b.id = a.id )
;
现在,每次执行上面的操作,它将在表的所有行中执行此操作。如果这是您始终需要做的事情,那么我建议您采取其他措施,但是对于一次性或很小的桌子来说,就足够了。
#3 楼
我已成功使用user1中的一个表从user2中的另一个表成功完成了此操作:update user1.table1 a
set a.field1 = (
select b.field1
from user2.table2 b
where a.field1=b.field1
)
where <condition for update user1.table1>
#4 楼
您可以在tableB上创建一个触发器,该触发器在每次更新tableB上的field_2时都会更新tableA。在此处查看有关创建触发器的更多信息-http://download.oracle.com/docs/cd/B19306_01/appdev.102/b14251/adfns_triggers.htm#BABCIBBJ评论
不相关的答案
– CleanBold
16年8月10日在8:31
评论
两个表是否包含相同数量的记录?