繁体   English   中英

Oracle SQL查询中的无效标识符

[英]Invalid identifier in an Oracle SQL query

我是编程方面的初学者,但无法在Oracle SQL上运行此查询。

我想要实现的是从表AYANTDROIT选择ID和名称(aya_id,aya_name),对于每个ID,都将另一个名称链接到另一个表BENEFICE 问题是,在我对表格受益人的查询中,我需要取回第一行中选择的ID,无论我如何总是以

ORA-00904:无效的标识符:aya.aya_id

这是我的代码:

SELECT DISTINCT aya.aya_id, 
aya_name,
(SELECT aya_name
FROM AYANTDROIT aya2 inner join  
     (SELECT ben_aya_id,
      level lev,
      ben_ben_id
      FROM benefice 
      START WITH ben_aya_id = **aya.AYA_ID**
      CONNECT BY prior ben_ben_id = ben_aya_id
      ORDER BY lev desc
      )
 on aya2.aya_id = ben_ben_id
 where rownum = 1),
FROM AYANTDROIT aya
ORDER BY aya_name

但是,当我提交以下查询时,aya.aya_id不返回任何错误。

SELECT DISTINCT aya.aya_id,
  aya_name,
  (SELECT aya_name 
   FROM AYANTDROIT aya2 
   WHERE aya2.aya_id = 
      (SELECT ben_ben_id 
       FROM benefice LEFT OUTER JOIN ayantdroit ayad 
                      ON ben_aya_id = ayad.aya_id 
                      WHERE ayad.aya_id = **aya.AYA_ID**
      )
   )
FROM AYANTDROIT aya
ORDER BY aya_name

有谁知道为什么我可以在第二种情况下而不是在第一种情况下调用此aya_id? 这真的很有帮助:)

谢谢您的时间,祝您有愉快的一天!

问题在于aya.aya_id太深地嵌套在相关子查询中。 有几种重建查询的方法,这是一种:

select distinct a1.aya_id, a1.aya_name, a2.aya_name
  from ayantdroit a1
  left join (
    select connect_by_root(ben_aya_id) root, ben_ben_id
      from benefice where connect_by_isleaf = 1
      start with ben_aya_id in (select aya_id from ayantdroit)
      connect by prior ben_ben_id = ben_aya_id) b
  on a1.aya_id = b.root
  left join ayantdroit a2 on a2.aya_id = b.ben_ben_id

请同时在Asktom网站上阅读类似的问题

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM