是你理解错了吧 先看括号内的1=0为false,在这里用的是or,所以1=0在这里实际是不起作用的,这时候语句等价于 select * from T_User where 1=1 and vcUserNo = 'pmw' and (1=0); 然后第一个条件是1=1,恒为true,在这里and的条件中也是不起作用的,可以去掉,语句等价于第二条语句
又做了一个试验,如果将SQL改成: select * from T_User where 1=1 and (vcUserNo = 'pmw') and (1=0); 符合我的初衷了,就是去掉vcUserNo = 'pmw'这个条件前面的1=0。晕
SELECT * FROM table1 WHERE (1=1) AND (field1='1001' OR 1=0) AND (1=0) 查不到数据 ora9i
对,就是要查不到数据,但按楼上的这种写法在ORACLA9i中还是回查到数据,我刚刚做了试验
还真的是,奇怪了。 我到sqlserver去看了,不会这样。
zmgowin(隐者(龙祖宗)) 分析的好像有点问题吧,括号的优先级应该是比and or高的啊
看来这是ORACLE9i的BUG了,没有办法解决了,对吧
没有9i,但是很难理解oracle会有这样的问题~~
真的是BUG啊 zhaowenbin (赵文彬) 快向ORACLE报告吧
我试了,没出现楼主的结果,全部都是正常的,是9i select * from T_User where 1=1 and (1=0 or vcUserNo = 'pmw') and (1=0); 没结果; select * from T_User where 1=0 or vcUserNo = 'pmw'; 等同于select * from T_User where vcUserNo = 'pmw';select * from T_User where 1=1 and (1=0) and (1=0 or vcUserNo = 'pmw') ; 没结果没找到所谓的bug
这个问题我在国外问了一下,看看下面的: http://www.experts-exchange.com/Databases/Oracle/Q_21128444.html在8,10没有这个问题,9.2.0.5版本也没有这个问题。 9.2.0.1、9.0.0.1. 版本好像都有这个问题,现在这个问题已经有人提交到了asktom了,大家去看看: http://asktom.oracle.com/pls/ask/f?p=4950:8:11621199567596749726 标题是:"Strange Result Showing up while executing a Query"
先看括号内的1=0为false,在这里用的是or,所以1=0在这里实际是不起作用的,这时候语句等价于
select * from T_User where 1=1 and vcUserNo = 'pmw' and (1=0);
然后第一个条件是1=1,恒为true,在这里and的条件中也是不起作用的,可以去掉,语句等价于第二条语句
select * from T_User where 1=1 and (vcUserNo = 'pmw') and (1=0);
符合我的初衷了,就是去掉vcUserNo = 'pmw'这个条件前面的1=0。晕
查不到数据
ora9i
我到sqlserver去看了,不会这样。
zhaowenbin (赵文彬) 快向ORACLE报告吧
select * from T_User where 1=1 and (1=0 or vcUserNo = 'pmw') and (1=0);
没结果;
select * from T_User where 1=0 or vcUserNo = 'pmw';
等同于select * from T_User where vcUserNo = 'pmw';select * from T_User where 1=1 and (1=0) and (1=0 or vcUserNo = 'pmw') ;
没结果没找到所谓的bug
http://www.experts-exchange.com/Databases/Oracle/Q_21128444.html在8,10没有这个问题,9.2.0.5版本也没有这个问题。
9.2.0.1、9.0.0.1. 版本好像都有这个问题,现在这个问题已经有人提交到了asktom了,大家去看看:
http://asktom.oracle.com/pls/ask/f?p=4950:8:11621199567596749726
标题是:"Strange Result Showing up while executing a Query"