oracle 执行请求更新时出现错误ora-01427

nhjlsmyf  于 2023-04-20  发布在  Oracle
关注(0)|答案(1)|浏览(265)

我有两个表,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:

mum43rcc

mum43rcc1#

第二个查询有两个问题

首先当子查询在issue_quantity列中返回null时,新计算的值item_quantity - nullnull。这就是您观察到的 * 只需删除数字 *。

第二个**问题仍然存在,如果子查询为给定的sklad_item_id返回多行,您将遇到错误ORA-01427: single-row subquery returns more than one row
为了解决第一个问题,在EXISTS子查询and issuence.issue_quantity is not null中添加一个过滤器,它将从更新中消除此类情况。
对于第二个问题,您可以在子查询中计算sum(issue_quantity)
所以固定查询应该是

UPDATE sklad
SET item_quantity = item_quantity - (
  SELECT sum(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 and  issuence.issue_quantity is not null
);

相关问题