【问题标题】:Oracle: "ORA-00918 column ambiguously defined" even after using fully qulaified namesOracle:“ORA-00918 列定义不明确”即使在使用完全限定名称后
【发布时间】:2016-05-11 05:59:46
【问题描述】:

我正在尝试像这样加入两个视图:

Select CH.ID 
From V_CHARGE CH 
full outer join V_TEMPCH VT 
on CH.ID = VT.ID_CHARGE

我收到“ORA-00918:列定义不明确”错误,尽管我在列名之前使用了别名。 我已经被困了一个小时。请帮忙

更新

好吧,连接中使用的视图在它们自己内部有多个连接。连接是这样一个接一个的:

Select *
From tblA A
cross join tblB B
left outer join tblC C
on C.id = b.ID

解决问题的方法是使用括号分隔连接,如下所示:

Select *
From (Select *
      From tblA A
      cross join tblB B
     ) D
left outer join tblC C
on C.id = D.id

仍然不明白为什么使用第一种语法会出现问题,因为正在连接的表中没有冲突的列。 无论如何感谢您的帮助:)

【问题讨论】:

  • 请显示表格定义。
  • 你能制作SELECT * from V_CHARGESELECT * from V_TEMPCH吗?
  • 可以,视图编译成功
  • 内连接或左连接会发生什么?
  • @FlorinGhita 我刚刚尝试过。内连接以及左、右连接都可以正常工作。

标签: oracle join view oracle10g ambiguous


【解决方案1】:

对于这个错误,你也有这个解决方法:

alter session set "_column_elimination_off"=true;

(如https://community.oracle.com/thread/2431395?tstart=0所见)

【讨论】:

    【解决方案2】:

    假设您的标记是正确的,请注意完全外连接在 Oracle 10 中存在缺陷 - 尤其是视图 - as discussed here。您可以尝试使用他们提到的 WITH 语法,如果某些评论者指出优化器重写有些奇怪,您可以通过一些别名和子查询来回避它:

    Select CH.ch_ID 
    From (SELECT "ID" AS ch_id from V_CHARGE) V_CH 
       full outer join (select id_charge as vt_id from V_TEMPCH) V_T 
    on v_CH.ch_ID = V_T.vt_ID 
    

    如果 WITH 语法和那仍然给出错误,那么我会更深入地研究视图

    另外需要注意的是,在 10G 中,使用旧的 oracle 语法 DID 完全外连接有效。它很丑。它不是ANSI。我一直在努力让一些老派的开发人员停止使用它——但它并不是错误的。

    See here for the syntax 如果您不熟悉旧的 (+) 实现

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-08-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-14
      相关资源
      最近更新 更多