首页 > 解决方案 > ORA-00913 的嵌套选择错误:值太多

问题描述

完全披露:绝对是新手,我在学习。我编写了以下选择例程,该例程会引发 ORA-00913:第 13 行第 18 列的值过多错误(地址信息的第二个嵌套选择语句)。我已经搜索并阅读了最简单的建议(确保您的括号匹配或查找拼写错误)以明确查看 WHERE 子句,使用 AS 或其他建议,但到目前为止还没有。

select distinct  
   (select u.misc_data 
              from ps_name_miscnmbr u                                       
              where (u.misc_id = 'RFID') and u.name_id = cn.name_id) RFID,
            cn.dflt_id StudentIdNumber,                                  
            cn.first_name FirstName,
            cn.last_name LastName,
            cn.middle_name MiddleName,
            'pot: 100' as CollegeCode,
            to_char (cn.date_birth, 'YYYY-MM-DD') DateOfBirth,
            p.area_code,
            p.phone_no,
            (select  a.line1 StreetAddress1,
                     a.line2 StreetAddress2,
                     a.city City,
                     a.stat_id ST,
                     a.postal Zip
                from co_v_dflt_addr a
                where (a.adty_id in ('LOCL','HOME') and a.name_id = cn.name_id)),
            e.email_address Email                       
    from co_name cn,
         sr_v_enroll s,
         co_name_demo d,
         co_v_name_email e,
         co_v_name_phone1 p
    where s.term_id in ('201701', '201702', '201703') 
        and s.name_id = cn.name_id
        and d.name_id = cn.name_id
        and e.name_id = cn.name_id
        and p.name_id = cn.name_id
order by LastName

当我为地址隔离第二个嵌套的 Select 语句并自行运行它时,它会执行并生成我期望的列/记录。

(select distinct         cn.name_id,
                     a.line1 StreetAddress1,
                     a.line2 StreetAddress2,
                     a.city City,
                     a.stat_id State,
                     a.postal Zip
                from co_v_dflt_addr a,
                     co_name cn
                where (a.adty_id in ('LOCL','HOME') and a.name_id = cn.name_id))

当我注释掉地址的整个选择子查询时,例程的其余部分也会执行并生成我期望的列/记录。

select distinct  
   (select u.misc_data 
              from ps_name_miscnmbr u                                       
              where (u.misc_id = 'RFID') and u.name_id = cn.name_id) RFID,
            cn.dflt_id StudentIdNumber,                                  
            cn.first_name FirstName,
            cn.last_name LastName,
            cn.middle_name MiddleName,
            'pot: 100' as CollegeCode,
            to_char (cn.date_birth, 'YYYY-MM-DD') DateOfBirth,
            p.area_code,
            p.phone_no,
            e.email_address Email                       
    from co_name cn,
         sr_v_enroll s,
         co_name_demo d,
         co_v_name_email e,
         co_v_name_phone1 p
    where s.term_id in ('201701', '201702', '201703') 
        and s.name_id = cn.name_id
        and d.name_id = cn.name_id
        and e.name_id = cn.name_id
        and p.name_id = cn.name_id
order by LastName

有人可以在这里为新手提供有用的提示吗?我一直在不停地尝试那些无法让我到达终点的事情。

谢谢

标签: sqloracle11g

解决方案


您在 select 语句中的子查询可能返回太多行。当您使用这样的子查询时,它只需要返回一行。

在这种情况下,您可能应该将表连接到查询的其余部分,如果可能没有地址返回,则使用外连接。但是,如果它们同时具有“LOCL”和“HOME”地址,这将带回两行。该设计选择取决于您。


推荐阅读