更高效,更快速地查询更新ID

时间:2017-11-21 12:09:18

标签: sql postgresql

Database PostgreSQL 9.6.4(从slackbuilds.org创建的包)。下面有两个表,只有表aa.newid上有主键,在表B上没有约束/索引。我需要使用b.aid中的值更新a.newid。问题是,是否有可能以比我作为匿名块更高效和更快速的方式来实现它(我的极高级代码如下)。使用我的高级解决方案需要一些时间(表b中的1M行大约需要10分钟)。

a.oldid a.newid
1       1
2       2
3       3
7       4

b.aid   b.desc
1       d1
2       d2
3       d3
7       d4

BEGIN
     FOR i IN SELECT newid FROM a
             LOOP
                     oldid := (SELECT a.oldid FROM a WHERE a.newid = i);
                     UPDATE b SET aid = i WHERE aid = oldid;
             END LOOP;
END

1 个答案:

答案 0 :(得分:1)

你应该能够在没有循环的情况下做到这一点:

update b 
  set aid = a.newid
from a 
where a.oldid = b.aid;