当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)
答案 0 :(得分:0)
答案 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
更新。