2016-10-27 95 views
-1

我有些時候SQL而來的,是新手的另一個表中添加列,因此需要幫助,我的問題如下(我已經嘗試更新,但它是很慢)查詢在一個快速的方式

我有一個表A(具有6.5密耳記錄),我想用表B(具有2.5mil記錄)的值向列中添加一列(Y),其中列(條件)列X AX = BX

B不幹沒有A的所有X值。

此外,X不唯一的值,但是用於Y的重複值,X也重複值

含義絕不會有的情況下,X = 10,Y = 5,X = 10,Y = 15(Y會有重複的值以及)

更多相關信息,相關 我不需要從Y添加的所有值僅在AX < 0(和AX = BX)

回答

0
  1. 寫一個實際SELECT將返回您在中需要的內容表。關於重複項,您可以執行「select distinct」以從輸出中刪除 重複項。
  2. 創建一個視圖基於您選擇 寫道。如果您只需「分享 選擇」,則不必創建TABLE,那麼您可能會更高效地爲您提供更有效的視圖,並使 更加靈活。
0

我想你試過這樣的事情

alter table A add(Y NUMBER); 

update A set Y = (select distinct Y from B where A.X = B.X) 
where A.X < 0; 

這是最簡單的情況..和「慢」是相對的10millions行心不是小。但是也許你需要B.X上的索引來防止全表掃描。如果需要可以稍後再移除。

+0

你是不是想要從B(不是X)中選擇Y?而且你似乎錯過了只有在A.X <0時才進行更新的部分。 – mathguy

+0

可能..現在更新這個答案來反映這一點。 – ShoeLace

0

首先將y列添加到表a(也許您已經做過)。

然後,當您使用另一個(「源」)表中的數據更新目標表時,merge語句通常優於update。它更容易閱讀和理解(並因此保持),它更加靈活 - 您可以在一個語句中進行更新,插入和刪除所有語句,有時它可能比(並且從不比它慢)update和其他陳述取代。

事情是這樣的:

merge into a 
    using (select distinct x, y from b where x < 0) g 
    on (a.x = g.x) 
when matched then update 
    set a.y = g.y 

注意,其他人已經指出的那樣,你必須select distinct在一個子查詢g第一;您無法直接從表b更新。