[英]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.