运行环境: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.)