ORACLE中,报ORA-00918:未明确定义列的错误

运行环境:Oracle10g sqlplus环境下。 

在查询语句中,经常会出现一个错误:ORA-00918:未明确定义列的错误。

当前遇到有两种情况。原因为:当查询语句中,查询的表(数据集,如a,b2张表格)中有相同的字段名,查询字段无法确认是该查哪个字段时,就会报未明确定义列的错误。

第一种情况: 

1.单表时: 

比如sign表中存在三个字段:

sign_id,sign_type,sign_status  SELECT SIGN_ID FROM (SELECT SIGN_ID,SIGN_TYPE,FC.* FROM SIGN FC) T

这个SQL语句就会报错,因为在T中SIGN_ID有两个字段(原因:sql语句中FC.*表示将sign表中所有字段再进行一次查询,与sql中原有的sign_id重复),导致DBMS无法确定要查询的哪个列 

修改之后:

SELECT SIGN_STATUS FROM (SELECT SIGN_ID,SIGN_TYPE,FC.* FROM FCONSIGN FC) T 

这样就不会报错了,T中SIGN_STATUS只有一个,这样就不会报错了。 

总而言之:在嵌套查询中,外查询的字段在子查询中只能出现一个,否则则无法确定是要查哪个字段。就会报 未明确定义列的错误。 

 第二种情况:

2.多表联合查询 

比如表A,B中都有a字段。 

select a from A,B

这样就要报错。因为也是无法确定查 哪一列。需要明确定义A.a或者B.a (如果在from语句后面为表取了别名,

比如 select a.a from A a join B b on (a.a = b.b)的时候,

则 select语句中那个被多张表都拥有的相同字段名也需要用别名标识 如:a.a.)

大家好,我是威5,更多精彩关注wx公众号:

posted @ 2017-04-17 21:34  小码农成长记  阅读(21598)  评论(0编辑  收藏  举报