我试图查询数据库表并在我的查询中包含以下WHERE子句:
WHERE (QTY_ON_HAND >= 1 OR QTY_ON_ORDER >= 1);
我想要退回所有手头有数量或订购数量的结果。
但是,这允许返回具有0 QTY_ON_HAND
和(null) QTY_ON_ORDER
。
通过结果滚动,它甚至允许-1
(以及其他底片)和NULL
。
以下是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')
答案 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。
答案 1 :(得分: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);
希望它有帮助!