原文
剛剛在項目中遇到這樣一個問題,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 )