Jak*_*kob 9 sql oracle oracle11g
昨天我在客户Oracle 10g实例上偶然发现了一些奇怪的行为.我写的一些程序给了我一个invalid identifier例外但在我的Oracle 11g实例上运行正常.
相关查询类似于以下内容:
select b.b.v_col_b
from tbla a
left join tblb b on a.pk_col_a = b.fk_a;
Run Code Online (Sandbox Code Playgroud)
请注意b.b.v_col_b查询的一部分.从更改left join到inner join没有最后提出一个ORA-00904: "B"."B"."V_COL_B": invalid identifier例外,但是:
可以在sqlfiddle上找到工作演示
编辑:添加表定义:
create table tbla (
pk_col_a int primary key,
v_col_a varchar2(50));
create table tblb (
pk_col_b int primary key,
fk_a int,
v_col_b varchar2(50));
Run Code Online (Sandbox Code Playgroud)
编辑2:正如@LalitKumarB所提到的,这似乎只发生在Oracle 11g上
小智 2
恭喜你,你发现了一个错误:)
在这种特殊情况下,您可以在选择任何 tblb 列时编写您想要的任何内容:
select helloworld.b.v_col_b, mghjfghj.b.fk_a, asdasdas.b.pk_col_b
from tbla a
left join tblb b on a.pk_col_a = b.fk_a;
Run Code Online (Sandbox Code Playgroud)
您甚至可以通过右连接来做到这一点:
select helloworld.b.v_col_b, mghjfghj.b.fk_a, asdasdas.b.pk_col_b
from tblb b
right join tbla a on a.pk_col_a = b.fk_a;
Run Code Online (Sandbox Code Playgroud)
但它不适用于 Oracle 连接语法( (+) 符号)。
这不是预期的行为,正如 Lalit 在评论中指出的那样,已在 12C 中修复。如果需要,您可以向 Oracle 支持部门提交错误请求。也许已经有一个补丁了。