暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle 带有相关子查询的Update语句,有意传递多行

askTom 2017-06-14
289

问题描述

我正在尝试使用一个子查询更新一个表,该子查询从另一个表总计多个事务。我无法弄清楚如何将父表中的特定行链接到子查询中的行。我不断得到ORA-01427: 子查询返回多行。我希望通过将更新表加入子查询来一次更新几条记录。当我将每个部分分解为select语句时,我得到了预期的结果。下面是我正在使用的脚本。

update trans a
set activityfeeamt =
    (select sum(transled.totaldolamt * -1)Fee
      from transled,
         (select planid, transid, activityfeeamt from trans where planid = '0003') t
      where transled.planid = t.planid and transled.transid = t.transid 
      and a.transid = t.transid and a.transid = transled.transid
      and transled.transtypecd = 'Di'
      and transled.planid = '0003' 
      group by transled.transid, transled.planid, transled.ssnum, t.activityfeeamt
      having sum(transled.totaldolamt * -1) < t.activityfeeamt)
where a.planid = '0003' 
and a.transid in 
      (select transid
      from trans 
      where planid = '0003' and transid in
      (select transid from transled where planid = '0003' 
      and transtypecd = 'Di' and transid in (176, 179))
复制

专家解答

为您的列提供值的查询必须为trans中的每一行最多返回一行。

所以你需要找到一种方法来将子查询中的每一行与你正在更新的表中的一行相关联:

update t1 
set  col = (
  select ...
  from   t2
  where  t1.xyz = t2.abc -- this join must give one row for each row of t1
);
复制


为了解释如何修复您的查询,我们需要更多地了解您的数据。因此,如果您需要进一步的帮助,我们将需要一个测试用例,其中包括:

-为您的表创建表语句
-显示错误的示例数据 (以插入的形式)。
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论