2013-12-19 21 views
1

我有以下查詢:SQL返回搜索即使檢查不應該

SELECT * FROM project WHERE year = 11 AND orderDate LIKE ? OR orderNo LIKE ? OR prodNo LIKE ? OR prodName LIKE ? OR inquiryDate LIKE ? OR confirmDate LIKE ? OR deliveryLT LIKE ? OR deliveryRiis LIKE ? OR signsPrice LIKE ? OR vrPrice LIKE ? OR deliveryPrice LIKE ? OR unexpectPrice LIKE ? OR riisBonus LIKE ? OR kennBonus LIKE ? OR profit LIKE ? OR profitPercent LIKE ? OR quantity LIKE ?; 

的問題是,即使列今年是不是11,我仍然收到的數據,是不是因爲我用OR? (使用問號是因爲我使用了preparedStatements)。

當我做

SELECT * FROM project WHERE year = 11 AND orderDate LIKE ? ; 

它工作得很好,所以我是糾正假定它是OR?如果是這樣,我該如何解決它?我希望其中的一個是真實的,一年是100%真實的;

回答

0

是;並在OR之前處理,因此您基本上查詢year = 11 and orderDate LIKE ?或其他任何條件都符合的所有項目。

您需要使用括號以明確哪些條件適用於AND,哪些應該是OR ed。

我會假設你希望它看起來是這樣的:

SELECT * FROM project WHERE year = 11 AND (orderDate LIKE ? OR orderNo LIKE ? OR prodNo LIKE ? OR prodName LIKE ? OR inquiryDate LIKE ? OR confirmDate LIKE ? OR deliveryLT LIKE ? OR deliveryRiis LIKE ? OR signsPrice LIKE ? OR vrPrice LIKE ? OR deliveryPrice LIKE ? OR unexpectPrice LIKE ? OR riisBonus LIKE ? OR kennBonus LIKE ? OR profit LIKE ? OR profitPercent LIKE ? OR quantity LIKE ?) 
+0

非常感謝,我不知道該syntax..makes的那部分的感覺,雖然,現在我來試試,將返回結果。完美的作品,非常感謝你。當我被允許時,我會在9分鐘內接受,你很快:D – allegroBegin

1

SQL rules of precedence狀態 「和」 之前來 「或」,所以你的SQL相當於:

SELECT * FROM project WHERE (year = 11 AND orderDate LIKE ?) OR orderNo LIKE ? 
OR prodNo LIKE ? OR prodName LIKE ? OR inquiryDate LIKE ? 

與加括號覆蓋以滿足您的要求:

SELECT * FROM project WHERE year = 11 AND 
(orderDate LIKE ? OR orderNo LIKE ? 
    OR prodNo LIKE ? OR prodName LIKE ? OR inquiryDate LIKE ?) 
相關問題