我的数据库是oracle8i。
有一个语句令人困惑,谁知道他的原理:
  一个select 语句:
    select distinct report_no from ma_slip;
  因为ma_slip中并没有这个字段,所以单独执行会出错但是讲该语句放入下述语句中:
  select * FROM IR_LOG WHERE REPORT_NO IN 
  (select distinct report_no from ma_slip);
该语句就不出错,并且因为ma_slip本省里面有数据,所以ir_log表中会把所有的数据都显示出来。请问一下上述语句的执行原理,为什么不出错?

解决方案 »

  1.   

    不知道你的为什么不报错.
    我写了个和你类似的SELECT  报的是report_no标识符无效.
    IN 里面的是个数组,使用循环传递数值.
    不过不建议使用,通常可以用IN 都可以用EXISTS,用EXISTS速度比IN要快,而且IN 里面的个数是有限制的,忘了具体是多少,大概9999999吧.
      

  2.   

    如果确有其实,那就是bug,不过,我想,是不是你在不同的用户下在执行语句啊,一个用户是有这个字段的,另一个用户没有
      

  3.   

    是不是oracle本身的bug问题?
      

  4.   

    select * FROM IR_LOG WHERE REPORT_NO IN 
      (select distinct report_no from ma_slip); 
    ==================================================
    report_no是在IR_LOG里吧?
    因为出现多个表时,如果你不指定表名,oracle会自己判断它属于哪个表
      

  5.   

    7楼的意思是不是指ma_slip没有指定别名,所以oracle自动认为report_no是ir_log中的report_no?
    比如应该这样写:
    select * FROM IR_LOG WHERE REPORT_NO IN 
      (select distinct m.report_no from ma_slip m); 
      

  6.   

    ORACLE 会自动判断语句中没有指定别名的字段属于哪个表?
    MARK