2015-03-02 56 views
0

我試圖從不同的表例如減去一個表中的值,如果我有兩個表樣附:Oracle子查詢減法。

enter image description here

我想從QD subtractracting表QI所以更新的數字新表將

QI: b 800 ç700

什麼是做到這一點的最好方法是什麼?由於事先

回答

1

假設將僅存在每col1值0或1 qd行:

update qi 
set col2 = col2 - (select col2 from qd where qd.col1 = qi.col1) 
where exists (select null from qd where qd.col1 = qi.col1); 

where exists子句是爲了防止更新qi行不具有qd對應物。

+0

如果什麼列有不同的名字?嘗試這個我去像子查詢返回多個行。 – bp01442 2015-03-02 19:54:56

+0

@ bp01442 - 顯然使用你的真實列名。如果每個QI有QD中有多行,那麼你可能只需要一個聚合 - 在子查詢中執行'sum(c2)'。 – 2015-03-02 20:36:50

+0

酷的作品感謝老兄。 – bp01442 2015-03-02 20:54:20

0

最好不要在這種情況下使用子查詢。使用這樣的:

select I.COL1, 
    (I.COL2 - D.COL2) as COL2 
from TABLE_QI I 
left join TABLE_QD D on D.COL1 = I.COL1; 

這裏是SQL Fiddle

+0

如果QI中有任何QD中沒有匹配行的行,它們將設置爲空; [本例中爲'col1''d'](http://sqlfiddle.com/#!4/946e9/1)。 – 2015-03-02 18:20:48

+0

您當然也不能加入更新,至少不使用子查詢* 8-) – 2015-03-02 18:29:50