查询以快速方式从另一个表添加列

时间:2016-10-27 03:34:56

标签: sql oracle

当SQL到来时,我有点新手,所以需要帮助我的问题如下(我已经尝试过更新,但速度非常慢)

我有一个表A(有6.5密耳的记录),我想用表B(带2.5密耳记录)的值添加一列(Y),条件为(公共)列X AX = BX

B没有A拥有的所有X值。

此外,X不是唯一值,但是对于Y的重复值,X也具有重复值

意味着永远不会出现X = 10,Y = 5和X = 10,Y = 15(Y也会有重复值)的情况

其他信息可能相关 我不需要在只有A.X<的地方添加来自Y的所有值。 0(和A.X = B.X)

3 个答案:

答案 0 :(得分:0)

  1. 写一个实际的SELECT,它会返回你需要的东西 表。关于重复,您可以执行“select distinct”删除 从输出中复制。
  2. 根据您的选择创建一个VIEW 中写道。如果您只需要共享,则无需创建TABLE 选择',可能是视图对你和方式更有效 更灵活。

答案 1 :(得分:0)

我假设你尝试过这样的事情

alter table A add( Y NUMBER); 

update A set Y = (select distinct Y from B where A.X = B.X)
where A.X < 0; 

这是最简单的情况..而且&#34;慢&#34;是相对1000万行不小。但也许您需要B.X上的索引来防止全表扫描。如果需要,可以在以后再次删除。

答案 2 :(得分:0)

首先将列y添加到表a(也许您已经这样做了)。

然后,当您使用另一个(&#34; source&#34;)表中的数据更新目标表时,merge语句通常优于update。它更容易阅读和理解(因此更容易维护),它更灵活 - 您可以在一个语句中进行更新,插入和删除,有时它可能比(并且它永远不会慢){{1和它取代的其他陈述。

这样的事情:

update

请注意,正如其他人已经指出的那样,您必须先在子查询merge into a using (select distinct x, y from b where x < 0) g on (a.x = g.x) when matched then update set a.y = g.y select distinct;您无法直接从表g更新。