在Oracle中将一个表中的列追加到另一个表

时间:2018-07-13 14:31:44

标签: sql oracle

假设我有一个名为A的表具有3列(1个ID列),并且有一个名为B的表具有2个列(1个ID列)。表A和表B可以使用列ID联接。

现在我想通过sql语句将表B中的一列追加到表A中。因此,执行后,表A将具有4列。表A和表B都有百万行,如何有效地做到这一点?

2 个答案:

答案 0 :(得分:1)

假设这是表的一次性合并,并且您有理由这样做,而不是使用联接(有或没有视图):

alter table a add (col4 varchar2(10)); -- or whatever data type you actually need

merge into a
using b
on (b.id = a.id)
when matched then update set a.col4 = b.col4;

您可以进行相关的更新:

update a set col4 = (
  select col4 from b where b.id = a.id
);

但是合并可能会更快。

答案 1 :(得分:1)

要执行2个步骤:

  • 更改数据模型(即为A指定附加列)
  • 用适当的值填充列。

如果您有足够的资源来临时保存A和B中包含的数据两次,则可以将这些操作折叠在一起:

CREATE TABLE C AS (
    SELECT a.id
         , a.col2
         , a.col3
         , b.col2 AS col4
      FROM A a
INNER JOIN B b ON ( b.id = a.id )
);

DROP TABLE A;
RENAME C TO A;

虽然Alex Poole的答案更有效,但上述解决方案适用于9i之前的oracle版本(深奥的)和其他rdbms(重命名表的语法可能有所不同,例如,PostgreSQL 9中的alter table C rename to A)。 x +)