左连接多个表 - " ORA-00904:无效标识符"错误

时间:2015-07-31 21:42:30

标签: sql oracle join

我试图找到表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);

2 个答案:

答案 0 :(得分:2)

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

然而,正如我在你的查询中看到的,将ansi sql(左外连接)与"混合,"指示连接至少是棘手的。

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

我会尝试像这样包装它

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

答案 1 :(得分:1)

正如您所见hereORA-00904错误表示列名无效或缺失。

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