ORACLE SQL Developer Update Statement


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

我正在尝试更新初始值均为 1000 的库存列,并将 QDEL 表中的交货次数添加到该 1000 中。这有效,但 QDEL 表中没有交付的行中存在空值。我不知道为什么???

因为如果所有DELQTY行都NULL SUM则返回NULL。你可以做这样的事情:

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

添加WHERE EXISTS,以便仅更新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 );

附言如果 QDEL 中的 delqty 值可能为 NULL,则需要使用 SUM(NVL(qd.delqty, 0))(或SUM(COALESCE(qd.delqty, 0)) (而不是 SUM(qd.delqty)

使用 NVL 始终返回总和,即使没有发生任何交付。

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

最新更新