我有两个表,ISSUENCE和SKLAD,我需要做一个查询,从仓库中的总数量中减去发出的物品的数量,但是我写的查询给出了错误ora-01427。
以下是我的请求:
UPDATE sklad
SET item_quantity = item_quantity - (SELECT issue_quantity FROM issuence)
WHERE item_id = (SELECT sklad_item_id from issuence);
我试过这样做,但这个请求只会删除给定id的项目数量:
UPDATE sklad
SET item_quantity = item_quantity - (
SELECT issue_quantity
FROM issuence
WHERE issuence.sklad_item_id = sklad.item_id
)
WHERE EXISTS (
SELECT 1
FROM issuence
WHERE issuence.sklad_item_id = sklad.item_id
);
表结构如下所示:
发布:
SKLAD:
1条答案
按热度按时间mum43rcc1#
第二个查询有两个问题
首先当子查询在
issue_quantity
列中返回null
时,新计算的值item_quantity - null
是null
。这就是您观察到的 * 只需删除数字 *。第二个**问题仍然存在,如果子查询为给定的
sklad_item_id
返回多行,您将遇到错误ORA-01427: single-row subquery returns more than one row
。为了解决第一个问题,在
EXISTS
子查询and issuence.issue_quantity is not null
中添加一个过滤器,它将从更新中消除此类情况。对于第二个问题,您可以在子查询中计算
sum(issue_quantity)
。所以固定查询应该是