简体   繁体   English

ORACLE SQL Developer更新声明

[英]ORACLE SQL Developer Update Statement

UPDATE QITEM 
   SET QTYONHAND = QTYONHAND + (SELECT SUM(DELQTY)
                                  FROM QDEL 
                                 WHERE QITEM.ITEMNAME = QDEL.ITEMNAME);

I am trying to update an inventory column where the intial values are all 1000 and I am adding the number of deliveries from the QDEL table to that 1000. This works but there are null values present in the rows with no deliveries in the QDEL table. 我正在尝试更新初始值均为1000的库存列,并且将QDEL表中的交货数量添加到该1000中。这可行 ,但是在QDEL表中没有交货的行中存在空值。 I cannot figure out why??? 我不知道为什么?

Because SUM returns NULL if all DELQTY rows are NULL . 因为SUM返回NULL如果所有DELQTY行是NULL You can do something like this : 您可以执行以下操作:

UPDATE QITEM 
SET QTYONHAND = QTYONHAND + COALESCE((SELECT SUM(DELQTY)
FROM QDEL 
WHERE QITEM.ITEMNAME = QDEL.ITEMNAME), 0);

You need to add WHERE EXISTS so you're only updating rows where there is at least one corresponding record in QDEL : 您需要添加WHERE EXISTS以便仅更新QDEL中至少有一个对应记录的QDEL

UPDATE qitem qi
   SET qi.qtyonhand = qi.qtyonhand + ( SELECT SUM(qd.delqty)
                                         FROM qdel qd
                                        WHERE qd.itemname = qi.itemname )
 WHERE EXISTS ( SELECT 1 FROM qdel qd
                 WHERE qd.itemname = qi.itemname );

PS If it's possible for the value of delqty in QDEL to be NULL, you'll want to use SUM(NVL(qd.delqty, 0)) (or SUM(COALESCE(qd.delqty, 0)) ) rather than SUM(qd.delqty) . PS如果delqty中的QDEL值可能为NULL,则需要使用SUM(NVL(qd.delqty, 0)) (或SUM(COALESCE(qd.delqty, 0)) )而不是SUM(qd.delqty)

Use NVL to always return a sum, even if no deliveries have taken place. 使用NVL始终返回总和,即使没有进行任何交货也是如此。

UPDATE QITEM 
SET QTYONHAND = QTYONHAND + (SELECT NVL(SUM(DELQTY),0)
    FROM QDEL 
    WHERE QITEM.ITEMNAME = QDEL.ITEMNAME);  

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM