【问题标题】:Oracle: Single Row Subquery Returns More than One RowOracle:单行子查询返回多于一行
【发布时间】:2018-08-27 15:46:57
【问题描述】:

基于其他问题,我认为我需要一个相关的子查询,但我无法完全弄清楚语法。我的子选择会为每个作业编号创建多行。

select distinct projectmaster.projectidentity as PROJECT,
                jdedwards.jobnumber,

                (select cast(substr(overagenarrative, 1, 2000) as
                             varchar(4000 byte))
                   from jlog.approvedjobsoverbudget
                   LEFT OUTER JOIN jlog.jdedwards
                     ON jdedwards.jobnumber =
                        approvedjobsoverbudget.jobnumber) as Overage

  from jlog.jdedwards,
       jlog.projectjobdetail,
       jlog.projectmaster,
       jlog.approvedjobsoverbudget
 where jdedwards.jobnumber = projectjobdetail.jobnumber
   and projectjobdetail.projectidentity = projectmaster.projectidentity
   and jdedwards.budgetyear = projectmaster.budgetyear
   and jlog.projectmaster.Projectstatus in (2)

   and jdedwards.jobnumber = approvedjobsoverbudget.jobnumber

【问题讨论】:

    标签: oracle subquery correlated


    【解决方案1】:

    为什么不简单

    select distinct projectmaster.projectidentity as PROJECT,
                    jdedwards.jobnumber,
                    --
    -- this line ...
                    cast(substr(overagenarrative, 1, 2000) as varchar2(4000 byte) as overage
    -- ... instead of all this:
    --                (select cast(substr(overagenarrative, 1, 2000) as
    --                             varchar(4000 byte))
    --                   from jlog.approvedjobsoverbudget
    --                   LEFT OUTER JOIN jlog.jdedwards
    --                     ON jdedwards.jobnumber =
    --                        approvedjobsoverbudget.jobnumber) as Overage
      from jlog.jdedwards,
           jlog.projectjobdetail,
           jlog.projectmaster,
           jlog.approvedjobsoverbudget
     where jdedwards.jobnumber = projectjobdetail.jobnumber
       and projectjobdetail.projectidentity = projectmaster.projectidentity
       and jdedwards.budgetyear = projectmaster.budgetyear
       and jlog.projectmaster.Projectstatus in (2)
       and jdedwards.jobnumber = approvedjobsoverbudget.jobnumber
    

    注意我在代码中添加的 cmets。

    【讨论】:

    • 经过大量试验和错误后,我最终选择了这个版本。感谢您的反馈。我试图创建一个外部联接,以便获得不包含 OVERAGE 值的记录。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-12
    • 1970-01-01
    • 2017-11-02
    相关资源
    最近更新 更多