我试图从不同的表例如减去一个表中的值,如果我有两个表样附:Oracle子查询减法。
我想从QD subtractracting表QI所以更新的数字新表将
QI: b 800 ç700
什么是做到这一点的最好方法是什么?由于事先
我试图从不同的表例如减去一个表中的值,如果我有两个表样附:Oracle子查询减法。
我想从QD subtractracting表QI所以更新的数字新表将
QI: b 800 ç700
什么是做到这一点的最好方法是什么?由于事先
假设将仅存在每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
对应物。
最好不要在这种情况下使用子查询。使用这样的:
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
如果QI中有任何QD中没有匹配行的行,它们将设置为空; [本例中为'col1''d'](http://sqlfiddle.com/#!4/946e9/1)。 – 2015-03-02 18:20:48
您当然也不能加入更新,至少不使用子查询* 8-) – 2015-03-02 18:29:50
如果什么列有不同的名字?尝试这个我去像子查询返回多个行。 – bp01442 2015-03-02 19:54:56
@ bp01442 - 显然使用你的真实列名。如果每个QI有QD中有多行,那么你可能只需要一个聚合 - 在子查询中执行'sum(c2)'。 – 2015-03-02 20:36:50
酷的作品感谢老兄。 – bp01442 2015-03-02 20:54:20