如何从另一个表更新一个表


28

我有一个表A有列(id,field_1,field_2),另一个表B有列(id,field_2)

现在我想将表B合并到A,这意味着我想将表A中的field_2更新为表B的值。那么如何实现呢?顺便说一句我正在使用甲骨文

谢谢


两个表是否包含相同数量的记录?
ujjwalesri 2011年

Answers:


29

共同相关的子查询(由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

2
MERGE语句的唯一限制是,您无法更新与其连接的列,即,您无法更新该ON子句中使用的列。
Lalit Kumar B

这对我ORA-01555: snapshot too old
有用

15

不能准确确定你在这一个以后有什么,但是这应该是一次性的,或连续通过计划任务的工作:

UPDATE table_a a
   SET field_2 = ( SELECT field_2
                     FROM table_b b
                    WHERE b.id = a.id )
;

现在,每次执行上述操作时,它将在表中的所有行中执行此操作。如果这是您始终需要做的事情,那么我建议您采取其他措施,但是对于一个或一个很小的表来说就足够了。


2

我已经成功使用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>

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.