补充说明:我使用的ORACAL是9i的

解决方案 »

  1.   

    不会吧!根据运算顺序not and or 结果应该一样啊。
      

  2.   

    是你理解错了吧
    先看括号内的1=0为false,在这里用的是or,所以1=0在这里实际是不起作用的,这时候语句等价于
    select * from T_User where 1=1 and vcUserNo = 'pmw' and (1=0);
    然后第一个条件是1=1,恒为true,在这里and的条件中也是不起作用的,可以去掉,语句等价于第二条语句
      

  3.   

    对,但是最外层的关系是与的关系,所有只要有一个未FALSE,整个条件就是FALSE呀,也就是说因为最后为1=0所有不管前面的条件为什么,结果都是FALSE。
      

  4.   

    又做了一个试验,如果将SQL改成:
    select  *  from  T_User  where  1=1  and  (vcUserNo  =  'pmw')  and  (1=0);
    符合我的初衷了,就是去掉vcUserNo  =  'pmw'这个条件前面的1=0。晕
      

  5.   

    SELECT * FROM table1 WHERE (1=1) AND (field1='1001' OR 1=0) AND (1=0) 
    查不到数据
    ora9i
      

  6.   

    对,就是要查不到数据,但按楼上的这种写法在ORACLA9i中还是回查到数据,我刚刚做了试验
      

  7.   

    还真的是,奇怪了。
    我到sqlserver去看了,不会这样。
      

  8.   

    zmgowin(隐者(龙祖宗)) 分析的好像有点问题吧,括号的优先级应该是比and or高的啊
      

  9.   

    看来这是ORACLE9i的BUG了,没有办法解决了,对吧
      

  10.   

    没有9i,但是很难理解oracle会有这样的问题~~
      

  11.   

    真的是BUG啊
    zhaowenbin (赵文彬) 快向ORACLE报告吧
      

  12.   

    我试了,没出现楼主的结果,全部都是正常的,是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
      

  13.   

    哦,你成功了?你的表中有记录吗?我重复测试了好多次,而且在不同的计算机上做过测试,使用的是ORACLE的SQL*PLUS WORKSHEET
      

  14.   

    这个问题我在国外问了一下,看看下面的:
    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"