【问题标题】:Is it possible to update one table from another table without a join in Vertica?是否可以在没有 Vertica 连接的情况下从另一个表更新一个表?
【发布时间】:2017-09-16 20:39:38
【问题描述】:

我有两个表 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;

【问题讨论】:

  • 这是一个稍微奇怪的语法,User3503711,所以我试图弄清楚你期望它做什么。 UPDATE <table> FROM ... 不是标准 SQL 语法。看起来您希望表B 中所有行中的列m 假定您在表ASUM(j) 时获得的值。对吗?
  • 这是一种 Teradata SQL 语法。 [这里] (stackoverflow.com/questions/10987152/…) 发布了类似的语法。是的,这就是我想要做的。表 A 中的 Sum(j) 将被复制到表 B 的 m 列。 - @marcothesane

标签: sql database sql-update vertica


【解决方案1】:

Teradata SQL 语法不适用于 Vertica,但以下查询应该做同样的事情:

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2011-03-16
      • 1970-01-01
      • 2015-09-08
      • 1970-01-01
      • 2011-04-22
      • 1970-01-01
      • 2019-02-18
      • 2017-11-20
      • 1970-01-01
      相关资源
      最近更新 更多