UPDATE QITEM
SET QTYONHAND = QTYONHAND + (SELECT SUM(DELQTY)
FROM QDEL
WHERE QITEM.ITEMNAME = QDEL.ITEMNAME);
我正在尝试更新库存列,其中初始值都是1000,我将 QDEL 表中的交货数量添加到1000.这样可行,但是存在空值 QDEL 表中没有交货的行。我无法弄清楚为什么???
答案 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。如果delqty
中QDEL
的值可能为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);