and or not优先级
2014-04-24 07:25
218 查看
刚刚在项目中遇到这样一个问题,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依然不正确
呵呵,发现问题了:
where 后面如果有or的条件,则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依然不正确
呵呵,发现问题了:
where 后面如果有or的条件,则or自动会把左右的查询条件分开,原因就是:and的执行优先级最高!
关系型运算符优先级高到低为:not and or
问题的解决办法是:
用()来区分执行顺序!!!!
上面我所需要的SQL语句是这样的
select * from LOAN_BACK_LIBRARY where STATUS=3 and (LIBRARY_ID=1 or LIB_ID=1 )
相关文章推荐
- not and or的优先级
- AND OR的执行顺序和优先级
- SQL中 and or优先级问题
- SQL中 and or优先级问题
- SQL中 and or优先级问题(转)
- Django块标签if else 配合not and or的使用
- SQL中逻辑运算 and or优先级
- not and or的优先级
- sql中and or优先级
- SQL中 and or优先级问题
- SQL中not and or优先级问题
- 数据运算+-*/,比较运算符==!=,赋值运算,逻辑运算and,or,not,成员运算in,not in,身份运算is is not,位运算&|,运算符的优先级
- not and or的优先级
- mysql查询时,and or同时存在时,and的优先级高于or
- 逻辑 与 或 非的优先级(and or not 优先级)
- SQL中 and or优先级问题
- oracle中逻辑运算符(not,and,or)及其优先级
- SQL语句中AND OR运算符优先级
- SQL中 and or优先级问题(转)
- mysql and or 优先级