【问题标题】:ORA-01427: single-row subquery returns more than one row - issueORA-01427: 单行子查询返回多于一行 - 问题
【发布时间】:2018-12-25 22:05:27
【问题描述】:
update dsalesinvoicehdr set paymentterms = ( select pt.termcode from dsalesinvoicehdr dsh
       inner join mg_subledger mp on mp.mg_subledgerid = dsh.customer 
       inner join mg_partytbill mb on mb.bsubledger = mp.subledgercode  
       left join payterm pt on pt.paytermid = mb.paymentterm)

ORA-01427: 单行子查询返回多于一行

如何解决这个问题。请帮忙

【问题讨论】:

  • 这是说您的子查询返回多于一行,这意味着它不能用作SET 值。
  • @Max,使用update dsalesinvoicehdr set paymentterms = (),您要求Oracle 在dsalesinvoicehdr 表的每一行中将由子查询选择的单个值分配给paymentterms。但是您的子查询返回不止一行,所以 Oracle 不知道要设置哪个值

标签: sql oracle


【解决方案1】:

会导致这个错误,因为你的子查询返回多条信息你的子查询返回多行数据

您可以使用UPDATEJOIN

update
( 
select pt.termcode,dsh.paymentterms 
from dsalesinvoicehdr dsh
inner join mg_subledger mp on mp.mg_subledgerid = dsh.customer 
inner join mg_partytbill mb on mb.bsubledger = mp.subledgercode  
left join payterm pt on pt.paytermid = mb.paymentterm
) t
set  t.termcode= t.paymentterms  

【讨论】:

    【解决方案2】:

    使用更新并加入伙伴!

    update
    ( 
       select pt.termcode,dsh.paymentterms 
       from dsalesinvoicehdr dsh
       inner join mg_subledger mp on mp.mg_subledgerid = dsh.customer 
       inner join mg_partytbill mb on mb.bsubledger = mp.subledgercode  
       left join payterm pt on pt.paytermid = mb.paymentterm
    ) tab
    set  tab.termcode= tab.paymentterms 
    

    【讨论】:

      【解决方案3】:

      您需要选择其中一个值。常用方法是聚合函数或where rownum = 1

      update dsalesinvoicehdr
          set paymentterms = (select pt.termcode
                              from dsalesinvoicehdr dsh inner join
                                   mg_subledger mp
                                   on mp.mg_subledgerid = dsh.customer inner join
                                   mg_partytbill mb
                                   on mb.bsubledger = mp.subledgercode join
                                   payterm pt
                                   on pt.paytermid = mb.paymentterm
                              where rownum = 1
                             );
      

      您不需要子查询中的left join。无论如何,不​​匹配将导致NULL

      【讨论】:

        猜你喜欢
        • 2017-11-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-01-16
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多