是否可以在没有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;
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
。最后放下中间表。当然,这是假设您已经以适合您的更新逻辑的方式对表进行了分区。
这是一个稍微特殊的语法User3503711,所以我试图弄清楚你期望它做什么。 'UPDATE
这是一个Teradata SQL语法。类似的语法发布[这里](https://stackoverflow.com/questions/10987152/teradata-update-table-from-select-statement)。和是的,这就是我想要做的。来自表A的Sum(j)将被复制到表B的m列。 - @marcothesane – user3503711
回答
Teradata数据SQL语法不会与Vertica的工作,但下面的查询应该做同样的事情:
根据您的表的大小,这可能不是一个有效的方法更新数据。垂直是一个WORM(一次写入多次读取)存储,并不针对更新或删除进行优化。
另一种方法是首先将目标表中的数据临时移动到另一个中间表(但不是临时表)。之后,使用另一个表编写连接查询以产生所需的结果,最后使用该连接查询使用
export table
。最后放下中间表。当然,这是假设您已经以适合您的更新逻辑的方式对表进行了分区。相关问题