2014-02-27 15 views
0

我想畫一個表結果,其中di_rl_id = 9任何以下也是如此:MySQL SELECT查詢條件與預期不符 - 什麼是正確的格式?

di_status = 'APPROVED'di_status = 'PENDING'di_status = 'SUSPENDED'

查詢我有如下,但它不符合我要找的條件,因爲它返回,我心目中的條件不符合行,例如其中di_rl_id != 9

SELECT * 
FROM d_info 
WHERE di_status = 'PENDING' 
OR di_status = 'APPROVED' 
OR di_status = 'SUSPENDED' 
AND di_rl_id = '9' 

我是否缺少特殊關鍵字?

任何幫助將不勝感激。

回答

4

您需要使用圓括號從您AND子句分離出的或條款。通過這種方式,前三個條件之一將成立,AND di_rl_id='9'將始終爲真。

SELECT * 
FROM d_info 
WHERE (di_status = 'PENDING' 
OR di_status = 'APPROVED' 
OR di_status = 'SUSPENDED') 
AND di_rl_id = '9' 

AND運算符的優先級高於OR,就像乘法具有比加法更高的優先級。這就是爲什麼你得到錯誤的結果集。你可以閱讀有關運算符優先級on the MySQL docs.

+1

爲了解釋之前發生了什麼,有小於或更高的優先級,所以最後一對(=暫停AND = 9)先發生,然後OR =待定OR =批准。 –

0

如果你想從分離或條款和clause.You必須加括號

SELECT * 
FROM d_info 
WHERE (di_status = 'PENDING' 
OR di_status = 'APPROVED' 
OR di_status = 'SUSPENDED') 
AND di_rl_id = '9'