SQL中 and or优先级问题(转)
2013-10-23 10:44
281 查看
刚刚在项目中遇到这样一个问题,SQL语句如下:
select * from LOAN_BACK_LIBRARY where LIBRARY_ID=1 or LIB_ID=1 and STATUS=3
我想要的结果的条件是:1. LIBRARY_ID=1 或者 LIB_ID=1
2.STATUS=3
但是结果并非如此,出现了STATUS!=3的结果,但是却匹配了 LIBRARY_ID=1 or LIB_ID=1
为什么呢
原来这个SQL的执行是这样的:
select * from LOAN_BACK_LIBRARY where LIBRARY_ID=1 or LIB_ID=1 and STATUS=3
修改为:
select * from LOAN_BACK_LIBRARY where STATUS=3 and LIBRARY_ID=1 or LIB_ID=1 依然不正确
原因为计算机理解为
select * from LOAN_BACK_LIBRARY where (STATUS=3 and LIBRARY_ID=1) or LIB_ID=1
呵呵,发现问题了:
where 后面如果有and,or的条件,则or自动会把左右的查询条件分开,即先执行and,再执行or。原因就是:and的执行优先级最高!
关系型运算符优先级高到低为:not and or
问题的解决办法是:
用()来改变执行顺序!!!!
上面我所需要的SQL语句是这样的
select * from LOAN_BACK_LIBRARY where STATUS=3 and (LIBRARY_ID=1 or LIB_ID=1 )
这样就是完美的答案了!!
select * from LOAN_BACK_LIBRARY where LIBRARY_ID=1 or LIB_ID=1 and STATUS=3
我想要的结果的条件是:1. LIBRARY_ID=1 或者 LIB_ID=1
2.STATUS=3
但是结果并非如此,出现了STATUS!=3的结果,但是却匹配了 LIBRARY_ID=1 or LIB_ID=1
为什么呢
原来这个SQL的执行是这样的:
select * from LOAN_BACK_LIBRARY where LIBRARY_ID=1 or LIB_ID=1 and STATUS=3
修改为:
select * from LOAN_BACK_LIBRARY where STATUS=3 and LIBRARY_ID=1 or LIB_ID=1 依然不正确
原因为计算机理解为
select * from LOAN_BACK_LIBRARY where (STATUS=3 and LIBRARY_ID=1) or LIB_ID=1
呵呵,发现问题了:
where 后面如果有and,or的条件,则or自动会把左右的查询条件分开,即先执行and,再执行or。原因就是:and的执行优先级最高!
关系型运算符优先级高到低为:not and or
问题的解决办法是:
用()来改变执行顺序!!!!
上面我所需要的SQL语句是这样的
select * from LOAN_BACK_LIBRARY where STATUS=3 and (LIBRARY_ID=1 or LIB_ID=1 )
这样就是完美的答案了!!
相关文章推荐
- SQL中 and or优先级问题
- SQL中 and or优先级问题
- SQL中 and or优先级问题
- SQL中 and or优先级问题
- SQL中 and or优先级问题(转)
- 请教:SQL语句中OR和AND的优先级问题
- sql中and or优先级
- 数据库sql中and和or优先级的问题
- SQL语句中AND OR运算符优先级
- SQL中逻辑运算 and or优先级
- SQL中not and or优先级问题
- Sql order by 数据排序 优先级问题
- 在T-SQL中注意and和or的优先级问题
- PL/SQL Dev无法登录的一个怪问题
- SQL2005 Collate问题
- oracle安装后的问题:共享库Libsqlplus.so 无法访问
- 通过转成SQL来进行查询,解决hql不能在distinct,group by结果集上使用count的问题
- oracle数据库的sql平时遇到的一些小问题union,to_char(),null last,group by
- win7 64位 java.sql.SQLException: [Microsoft][ODBC 驱动程序管理器] 未发现数据源名称并且未指定默认驱动程序 问题
- thinkphp 执行sql语句,表前缀问题