EXISTS子查询Oracle 11.2与Oracle 12.1

时间:2017-12-22 09:36:40

标签: sql oracle exists

我正在努力解决这个奇怪的事情(不要为这个例子的意义而烦恼,它只是一个突出问题的样本)。 以下代码在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))
;

有没有人对此有解释?

2 个答案:

答案 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);