ORA-00918:列模糊定义..如何解决此错误?

时间:2014-04-29 14:23:28

标签: oracle

以下是查询:

select   
           t1_c1,
           case 
           when max(t1_c2) = 'X'
           then  max(t2_c3) 
           else 'X ' || max(t2_c3) 
           end as t2_c3
from    
           t1 a1,
           t2
where  t1_c4 =
(
select  max(a2.t1_c4) 
from   t1 a2 
where a1.t1_c1 = a2.t1_c1 
and    a2.t1_c4 <= '31-AUG-'||&ws_acad_yr
)
and    t1_c2 = t2_c8(+)
group by t1_c1
)

where  c1 = t3_c1
and    t3_c5 is null
and    c1 = t4_c1
and    t4_c6 = t5_c8(+)
and    t4_c5 = t6_c8(+)
and    c1 = t7_c1(+)
and    c1 = t8_c1(+)
and    c1 = t1_c1(+)

我正在使用来自两个或更多表格的pidm列。但我不知道如何解决这个问题?我不知道列的前缀是什么以及在哪里。我是这方面的新用户。

1 个答案:

答案 0 :(得分:2)

当您需要区分具有相同名称的两列时,您可以为其所属的表提供前缀:

SELECT line.total, invoice.total
FROM invoice
INNER JOIN line ON invoice.invoice_id=line.invoice_id

但这并不总是可行/可取的:

  • 列不可能来自子查询
  • 如果您同时阅读同一张表
  • ,则无效
  • 表名太长
  • 是不实际的

要解决此问题,SQL允许定义别名。你已经在使用它们了!

from t1 a1
     ^  ^
     |   \ Alias
     \ Table

ORA-00918:列模糊定义意味着您有一个属于多个列的列名,Oracle不知道您的意思。完整的错误消息可能会告诉您列名称以及您使用它的确切位置。添加适当的表/别名前缀,您就完成了。