2016-09-21 91 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