【问题标题】:EXISTS subquery Oracle 11.2 versus Oracle 12.1EXISTS 子查询 Oracle 11.2 与 Oracle 12.1
【发布时间】:2018-06-04 23:11:19
【问题描述】:

我正在为这个奇怪的事情苦苦挣扎(不要理会这个例子的含义,它只是一个突出问题的示例)。 以下代码在 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))
;

有人对此有解释吗?

【问题讨论】:

  • “运行良好......但失败......”是什么意思?任何错误信息?你期望什么,你会得到什么?
  • 可能与此有关:support.oracle.com/epmos/faces/…

标签: sql oracle exists


【解决方案1】:

“t0.un”(在查询的最后)嵌套太深(即 2 级)。如果你将它升级(忽略它可能毫无意义的事实),它会“起作用”,例如

SELECT deux
  FROM test_0 t0
 WHERE EXISTS
          (SELECT trois
                     FROM test_1 t1
                    WHERE t1.un = t0.un); 

【讨论】:

    【解决方案2】:

    您在 Oracle 12.1 之前通过 Oracle 获得此功能

    ORA-00904: "T0"."UN": invalid identifier

    因为在以前的版本中,Oracle 无法确定定义 t0 的上下文。所以这似乎是对版本的改进。

    【讨论】:

      猜你喜欢
      • 2016-02-23
      • 2021-03-02
      • 1970-01-01
      • 1970-01-01
      • 2021-04-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多