Oracle SQL 查询中的标识符无效
Invalid identifier in an Oracle SQL query
我是编程的初学者,我在 Oracle SQL 上 运行 这个查询中无法成功。
我想要实现的是从 table AYANTDROIT
中选择 ID 和名称(aya_id、aya_name),并针对这些 ID 中的每一个链接到另一个 table、BENEFICE
中的 id 的另一个名称。问题是,在我对 table 福利的查询中,我需要取回在第一行中选择的 id,而且无论如何我总是以
结束
ORA-00904 : invalid identifier : 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 没有 return 任何错误。
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 网站上的 similiar question。
我是编程的初学者,我在 Oracle SQL 上 运行 这个查询中无法成功。
我想要实现的是从 table AYANTDROIT
中选择 ID 和名称(aya_id、aya_name),并针对这些 ID 中的每一个链接到另一个 table、BENEFICE
中的 id 的另一个名称。问题是,在我对 table 福利的查询中,我需要取回在第一行中选择的 id,而且无论如何我总是以
ORA-00904 : invalid identifier : 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 没有 return 任何错误。
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 网站上的 similiar question。