SQL中 and or優先級問題 |
發布時間: 2012/9/3 17:21:34 |
剛剛在項目中遇到這樣一個問題,SQL語句如下: select * from LOAN_BACK_LIBRARY where LIBRARY_ID=1 or LIB_ID=1 and STATUS=3 我想要的結果的條件是:1. LIBRARY_ID=1 或者 LIB_ID=1-
但是結果并非如此,出現了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 后面如果有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 ) 這樣就是完美的答案了!!!!
本文出自:億恩科技【www.vbseamall.com】 |