我的数据库是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表中会把所有的数据都显示出来。请问一下上述语句的执行原理,为什么不出错?
有一个语句令人困惑,谁知道他的原理:
一个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表中会把所有的数据都显示出来。请问一下上述语句的执行原理,为什么不出错?
我写了个和你类似的SELECT 报的是report_no标识符无效.
IN 里面的是个数组,使用循环传递数值.
不过不建议使用,通常可以用IN 都可以用EXISTS,用EXISTS速度比IN要快,而且IN 里面的个数是有限制的,忘了具体是多少,大概9999999吧.
(select distinct report_no from ma_slip);
==================================================
report_no是在IR_LOG里吧?
因为出现多个表时,如果你不指定表名,oracle会自己判断它属于哪个表
比如应该这样写:
select * FROM IR_LOG WHERE REPORT_NO IN
(select distinct m.report_no from ma_slip m);
MARK