ORACLE SQL Developer更新声明

时间:2015-03-01 23:08:40

标签: sql oracle oracle-sqldeveloper

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

我正在尝试更新库存列,其中初始值都是1000,我将 QDEL 表中的交货数量添加到1000.这样可行,但是存在空值 QDEL 表中没有交货的行。我无法弄清楚为什么???

3 个答案:

答案 0 :(得分:2)

如果所有SUM行都是NULL,则DELQTY会返回NULL。你可以这样做:

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

答案 1 :(得分:2)

您需要添加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 );

P.S。如果delqtyQDEL的值可能为NULL,则您需要使用SUM(NVL(qd.delqty, 0))(或SUM(COALESCE(qd.delqty, 0)))而不是SUM(qd.delqty)。< / p>

答案 2 :(得分:1)

即使没有交付,也要使用NVL始终返还金额。

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