【问题标题】:Left Join with multiple tables - "ORA-00904:invalid identifier" errorLeft Join 与多个表 - “ORA-00904:invalid identifier”错误
【发布时间】:2015-07-31 21:42:29
【问题描述】:

我正在尝试从表 2 中查找所有记录,这些记录在表 3 或表 4 中都不存在。我必须在查询中使用表 1,因为它为我提供了将表 2 与表 3 连接起来的键和表 4。

但是,我不断收到"ORA-00904:invalid identifier" error on "T1.COL3"

以下是我的查询:

Select T1.COL1 FROM  Tab1 T1 , Tab2 T2
        LEFT JOIN Tab3 T3 ON (T2. COL1=T1.COL1 AND T3. COL2=T1.COL3)
        LEFT JOIN Tab4 T4 ON (T2. COL1=T1.COL1 AND T4. COL2=T1.COL3)
where  ( T3. COL2 IS NULL and T4. COL2 IS NULL);

【问题讨论】:

  • 欢迎来到 SO!您能否提供表格的架构/列列表?谢谢。错误看起来有点像表 1 上不存在 COL3 ...

标签: sql oracle join


【解决方案1】:

由于 oracle 查询优化器中的 BUG,我正在处理类似的错误。

但是,正如我在您的查询中看到的,将 ansi sql(左外连接)与“,”混合表示连接至少很棘手。

我相信在你的情况下,在“,”之前有 T1 使得它在被解释为仅包括 T2、T3 和 T4 的 ON 子句中不可见。

我会尝试这样包装它

Select T1.COL1 FROM  Tab1 T1  inner join Tab2 T2 on T2. COL1=T1.COL1
LEFT JOIN Tab3 T3 ON  T3. COL2=T1.COL3
LEFT JOIN Tab4 T4 ON T4. COL2=T1.COL3
where  ( T3. COL2 IS NULL and T4. COL2 IS NULL);

【讨论】:

    【解决方案2】:

    如您所见hereORA-00904 错误意味着列名无效或缺失。

    在您的情况下,这是一个无效的名称。如文档所述,名称必须仅包含字母数字字符和特殊字符 $、_ 和 #。否则,名称必须用双引号括起来。所以尝试用双引号将名称括起来。

    【讨论】:

    • 嗨,这就是问题所在。实际上,列名是有效的。当我从 Tab1 中选择 Col 3 时,我得到了值。此外,它适用于简单的连接查询。但是,今天当我写上面的查询时,它给了我这个错误!!!
    • 我不太明白你在说什么。但是你是说用双引号括起来 T1.COL3 并没有解决你的问题?
    猜你喜欢
    • 2015-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-21
    相关资源
    最近更新 更多