我正在努力解决这个奇怪的事情(不要为这个例子的意义而烦恼,它只是一个突出问题的样本)。 以下代码在Oracle 12.1.0.2.0上运行良好,但在11.2.0.3.0上运行失败。
create table test_0 as
select 1 as un, 2 as deux
from dual
;
create table test_1 as
select 1 as un, 3 as trois
from dual
;
select deux
from test_0 t0
where exists (select 1 from (select trois from test_1 t1 where t1.un =
t0.un))
;
有没有人对此有解释?
答案 0 :(得分:1)
您在Oracle 12.1之前使用Oracle获得此功能
ORA-00904: "T0"."UN": invalid identifier
因为在以前的版本中,Oracle无法确定定义t0
的上下文。所以这似乎是对版本的改进。
答案 1 :(得分:-1)
“t0.un”(在查询的最后)嵌套太深(2级,即)。如果你将它向上移动(忽略它可能毫无意义的事实),它会“有效”,例如
SELECT deux
FROM test_0 t0
WHERE EXISTS
(SELECT trois
FROM test_1 t1
WHERE t1.un = t0.un);