我有两个表A(i,j,k)和B(m,n)。
我想通过从表A中获取sum(j)来更新B表的'm'列。是否可以在Vertica中执行此操作?
以下代码可用于Teradata,但Vertica是否具有这种灵活性?
Update B from (select sum(j) as m from A)a1 set m=a1.m;
答案 0 :(得分:2)
Teradata SQL语法不能与Vertica一起使用,但以下查询应该做同样的事情:
update B set m = (select sum(j) from A)
答案 1 :(得分:0)
根据表的大小,这可能不是更新数据的有效方法。 Vertical是WORM(一次写入多次读取)存储,并未针对更新或删除进行优化。
另一种方法是首先将目标表中的数据暂时移动到另一个中间(但不是临时)表。之后使用另一个表编写连接查询以生成所需的结果,最后使用export table
与该连接查询。最后放下中间表。当然,这是假设您已经以适合您的更新逻辑的方式对表进行了分区。