特别奇怪的问题,大家看看,关于Select的where条件的。(在线)

zhaowenbin 2004-09-13 11:37:41
SQL语句如下:
select * from T_User where 1=1 and (1=0 or vcUserNo = 'pmw') and (1=0);

原来我设想者条语句检索不到任何数据,但实践表明它检索到了数据,而且同下面SQL语句结果
select * from T_User where 1=0 or vcUserNo = 'pmw';

但如果将SQL语句该成:
select * from T_User where 1=1 and (1=0) and (1=0 or vcUserNo = 'pmw') ;
就检索不到记录。

这是怎么回事?!
难道括号没有改变条件计算的优先级?

...全文
251 28 打赏 收藏 转发到动态 举报
写回复
用AI写文章
28 条回复
切换为时间正序
请发表友善的回复…
发表回复
jinbingg 2004-09-14
  • 打赏
  • 举报
回复
up
JeromeLiu 2004-09-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"
ligenlee 2004-09-13
  • 打赏
  • 举报
回复
SELECT * FROM table1 WHERE (1=1) AND (field1='1001' OR 1=0) AND (1=0)
查不到数据
ora9i
zhaowenbin 2004-09-13
  • 打赏
  • 举报
回复
又做了一个试验,如果将SQL改成:
select * from T_User where 1=1 and (vcUserNo = 'pmw') and (1=0);
符合我的初衷了,就是去掉vcUserNo = 'pmw'这个条件前面的1=0。晕
zhaowenbin 2004-09-13
  • 打赏
  • 举报
回复
对,但是最外层的关系是与的关系,所有只要有一个未FALSE,整个条件就是FALSE呀,也就是说因为最后为1=0所有不管前面的条件为什么,结果都是FALSE。
zmgowin 2004-09-13
  • 打赏
  • 举报
回复
是你理解错了吧
先看括号内的1=0为false,在这里用的是or,所以1=0在这里实际是不起作用的,这时候语句等价于
select * from T_User where 1=1 and vcUserNo = 'pmw' and (1=0);
然后第一个条件是1=1,恒为true,在这里and的条件中也是不起作用的,可以去掉,语句等价于第二条语句
zhaowenbin 2004-09-13
  • 打赏
  • 举报
回复
这就更郁闷呢?
dinya2003 2004-09-13
  • 打赏
  • 举报
回复
8i里面没有这种情况,9i里面没测试.
zhaowenbin 2004-09-13
  • 打赏
  • 举报
回复
事实如此,不相信你们试试,我好郁闷。谁有没有解决方案。
同时麻烦大家帮我顶顶此贴,我在线盼结果。
shbjwq430105 2004-09-13
  • 打赏
  • 举报
回复
不会吧!根据运算顺序not and or 结果应该一样啊。
zhaowenbin 2004-09-13
  • 打赏
  • 举报
回复
是啊,我晕倒,是BUG?
bzszp 2004-09-13
  • 打赏
  • 举报
回复
9i有这种情况???
zhaowenbin 2004-09-13
  • 打赏
  • 举报
回复
补充说明:我使用的ORACAL是9i的
netcreator 2004-09-13
  • 打赏
  • 举报
回复
zhaowenbin 2004-09-13
  • 打赏
  • 举报
回复
没有人有其他方法了?哪怎么打补丁,哪有下?
zhaowenbin 2004-09-13
  • 打赏
  • 举报
回复
还有没有其它方法?
zaq 2004-09-13
  • 打赏
  • 举报
回复
建议给数据库打个补丁试一试,应该能解决你的问题
zmgowin 2004-09-13
  • 打赏
  • 举报
回复
解释器的问题?
zhaowenbin 2004-09-13
  • 打赏
  • 举报
回复
哦,你成功了?你的表中有记录吗?我重复测试了好多次,而且在不同的计算机上做过测试,使用的是ORACLE的SQL*PLUS WORKSHEET
leborety 2004-09-13
  • 打赏
  • 举报
回复
我试了,没出现楼主的结果,全部都是正常的,是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
加载更多回复(8)

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧