Database PostgreSQL 9.6.4(从slackbuilds.org创建的包)。下面有两个表,只有表a
在a.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
答案 0 :(得分:1)
你应该能够在没有循环的情况下做到这一点:
update b
set aid = a.newid
from a
where a.oldid = b.aid;