假设我有一个名为A的表具有3列(1个ID列),并且有一个名为B的表具有2个列(1个ID列)。表A和表B可以使用列ID联接。
现在我想通过sql语句将表B中的一列追加到表A中。因此,执行后,表A将具有4列。表A和表B都有百万行,如何有效地做到这一点?>
答案 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和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 +)