2015-03-02 83 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