2017-09-13 64 views
0

我有兩個表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

回答

2

Teradata數據SQL語法不會與Vertica的工作,但下面的查詢應該做同樣的事情:

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

根據您的表的大小,這可能不是一個有效的方法更新數據。垂直是一個WORM(一次寫入多次讀取)存儲,並不針對更新或刪除進行優化。

另一種方法是首先將目標表中的數據臨時移動到另一箇中間表(但不是臨時表)。之後,使用另一個表編寫連接查詢以產生所需的結果,最後使用該連接查詢使用export table。最後放下中間表。當然,這是假設您已經以適合您的更新邏輯的方式對錶進行了分區。

相關問題