2016-09-21 92 views
0

我想查詢數據庫表,並在下面就我的查詢的WHERE子句:SQL WHERE字段1> = 1或場> = 1允許(空)值

WHERE (QTY_ON_HAND >= 1 OR QTY_ON_ORDER >= 1); 

我想返回所有結果誰擁有數量或訂單數量。

但是,這允許記錄返回具有0 QTY_ON_HAND(null) QTY_ON_ORDER的記錄。

滾動通過結果,它甚至允許-1(和其他底片)和NULL

enter image description here

下面是WHERE子句的其餘部分:

WHERE CHARGE_CODE = 'RETAIL' OR CHARGE_CODE = 'RETAILSN' AND 
     LOCATION = 100 AND 
     SPA_ITEM_ID LIKE '1%' AND 
     (QTY_ON_HAND >= 1 OR QTY_ON_ORDER >= 1); 

解決方案:

忘記第一個括號WHERE子句

CHARGE_CODE = 'RETAIL' OR CHARGE_CODE = 'RETAILSN' 

需求是

(CHARGE_CODE = 'RETAIL' OR CHARGE_CODE = 'RETAILSN') 
+1

是唯一的過濾器還是你有更多? –

+0

@vkp還有更多,但他們都工作正常,並正確過濾。 – WolfieeifloW

+0

嘗試刪除括號 –

回答

3

AND操作的優先級高於OR,所以你需要使用括號:

WHERE 
    (CHARGE_CODE = 'RETAIL' OR CHARGE_CODE = 'RETAILSN') 
    AND LOCATION = 100 
    AND SPA_ITEM_ID LIKE '1%' 
    AND (QTY_ON_HAND >= 1 OR QTY_ON_ORDER >= 1) 

更好的使用IN操作:

WHERE 
    CHARGE_CODE IN('RETAIL', 'RETAILSN') 
    AND LOCATION = 100 
    AND SPA_ITEM_ID LIKE '1%' 
    AND (QTY_ON_HAND >= 1 OR QTY_ON_ORDER >= 1) 

更多關於此事的documentation解釋。

+0

請記住在最後一個OR上使用括號但不是第一個......謝謝!我會盡可能接受答案。 – WolfieeifloW

+1

@WolfieeifloWerr ... Wolfie ...那些是括號;)不括號= [ –

+0

@ RicardoC今天我只是沒有點:P – WolfieeifloW

1

嘗試:

WHERE 
    CHARGE_CODE IN ('RETAIL','RETAILSN') AND 
    LOCATION = 100 AND 
    SPA_ITEM_ID LIKE '1%' AND 
    (QTY_ON_HAND >= 1 OR QTY_ON_ORDER >= 1); 

希望它能幫助!

+0

Yepp ..愚蠢的括號!謝謝! – WolfieeifloW