列未定义的错误是怎么回事?请帮忙看看下面的代码,我没有发现错误。
select 
to_char(key_date,'yyyymmdd') as dt_yyyymmdd, emp_no, per.name as name, cmp.companyname as cmp_name, ac.normal_tm as normal_time, ac.over_tm as over_time, ac.night_tm as night_time, ac.holiday_tm as holiday_time, ac.holidayover_tm as holidayover_tm, ac.area_cd 
from 
dsg_action_tbl ac, dsg_personal_tbl per, dsg_company_tbl cmp 
where 
to_char(ac.key_date,'yyyymm') in ('200403','200403') and ac.emp_no=per.emp_no(+) and ac.company_cd=cmp.company_cd(+) 
order by ac.emp_no, ac.area_cd

解决方案 »

  1.   

    select 
    to_char(key_date,'yyyymmdd') as dt_yyyymmdd, emp_no,  <---这里的emp_no是哪个表的???
    --ac.emp_no
    另;
    where 
    to_char(ac.key_date,'yyyymm') in ('200403','200403')    <---为什么用两个一样的值呢?
      

  2.   

    1.emp_no在用到的3个表里面都有。是否需要都注明呢?我这样写确实没有把握。我马上就试验一下,请前辈稍等。
    2.因为只是需要找2004年3月的数据。所以用了一个一样的值
      

  3.   

    建议:如果同一个字段有几个同名的,就一定要加上表名. 如ac.emp_no
         如果使用to_char(ac.key_date,'yyyymm')回破坏索引,尽量不要使用函数在条件的左边,
         可改为:ac.key_date>=to_date('20040301','yyyymmdd)
                and ac.key_date<to_date('20040401','yyyymmdd)
      

  4.   

    谢谢各位的帮助,现在已经可以了。to  GerryYang(轻尘):谢谢您的提醒,我一定会注意的。结帖:)