是否可以在没有Vertica连接的情况下更新另一个表中的一个表?

问题描述:

我有两个表A(i,j,k)和B(m,n)。是否可以在没有Vertica连接的情况下更新另一个表中的一个表?

我想通过从表A中获取sum(j)来更新B表的'm'列。是否可以在Vertica中执行此操作?

以下代码可用于Teradata,但Vertica具有这种灵活性吗?

Update B from (select sum(j) as m from A)a1 set m=a1.m; 
+1

这是一个稍微特殊的语法User3503711,所以我试图弄清楚你期望它做什么。 'UPDATE

FROM ...'不是标准的SQL语法。看起来你希望Table'B'中的所有行中的列'm'假设你在表'A'中的SUM(j)'时获得的值。是对的吗? – marcothesane
+0

这是一个Teradata SQL语法。类似的语法发布[这里](https://stackoverflow.com/questions/10987152/teradata-update-table-from-select-statement)。和是的,这就是我想要做的。来自表A的Sum(j)将被复制到表B的m列。 - @marcothesane – user3503711

回答

Teradata数据SQL语法不会与Vertica的工作,但下面的查询应该做同样的事情:

update B set m = (select sum(j) from A) 

根据您的表的大小,这可能不是一个有效的方法更新数据。垂直是一个WORM(一次写入多次读取)存储,并不针对更新或删除进行优化。

另一种方法是首先将目标表中的数据临时移动到另一个中间表(但不是临时表)。之后,使用另一个表编写连接查询以产生所需的结果,最后使用该连接查询使用export table。最后放下中间表。当然,这是假设您已经以适合您的更新逻辑的方式对表进行了分区。

相关文章

Teradata数据SQL语法不会与Vertica的工作,但下面的查询应该做同样的事情:

update B set m = (select sum(j) from A) 

根据您的表的大小,这可能不是一个有效的方法更新数据。垂直是一个WORM(一次写入多次读取)存储,并不针对更新或删除进行优化。

另一种方法是首先将目标表中的数据临时移动到另一个中间表(但不是临时表)。之后,使用另一个表编写连接查询以产生所需的结果,最后使用该连接查询使用export table。最后放下中间表。当然,这是假设您已经以适合您的更新逻辑的方式对表进行了分区。

Teradata数据SQL语法不会与Vertica的工作,但下面的查询应该做同样的事情:

update B set m = (select sum(j) from A) 

根据您的表的大小,这可能不是一个有效的方法更新数据。垂直是一个WORM(一次写入多次读取)存储,并不针对更新或删除进行优化。

另一种方法是首先将目标表中的数据临时移动到另一个中间表(但不是临时表)。之后,使用另一个表编写连接查询以产生所需的结果,最后使用该连接查询使用export table。最后放下中间表。当然,这是假设您已经以适合您的更新逻辑的方式对表进行了分区。