2015-05-11 51 views
0

我有以下準備語句查詢:MySQL和條款後OR子句被忽略

SELECT id FROM CustomerSettings WHERE id >= ? OR displayNameType = ? AND id < ? LIMIT 5 OFFSET 1 

查詢的「ID <」的部分被忽略。奇怪的是,如果我移動OR語句前面的語句,那麼它將被MySQL數據庫引擎正確評估。這種預期的行爲似乎很奇怪。我也曾嘗試將OR子句放在括號內,這不幸也沒有奏效;緊接在OR之後的AND子句仍然被忽略。

+0

很難確切地看到您要查找的結果。 'AND'綁定比'OR'更緊密,所以MySQL會將你的解析爲'WHERE id> =? OR(displayNameType =?AND id <?)'如果那不是你想要的,那麼這個選擇可能沒有意義。(id> =?OR displayNameType =?)AND id <?'因爲'id'可能不是能夠滿足這兩個條件。 –

回答

5

這是由於operator precedenceANDOR之前綁定,所以你的查詢是WHERE (id >= ?) OR (displayNameType = ? AND id < ?)。事情的順序很重要。我建議使用括號來明確訂單號碼ANDOR