2015-09-07 83 views
0

我有问题。执行以下SQL查询时:日期选择..不会工作

SELECT order_id, orderdatum, plaats 
FROM order_row 
INNER JOIN order_row_oneoff ON order_row.order_row_id = order_row_oneoff.order_row_oneoff_id 
INNER JOIN orders ON order_row.order_id = orders.ordernr 
WHERE orderdatum >= '2015-09-01' 
AND orderdatum < '2015-09-05' 
AND order_row.product_id = '4118' OR order_row.product_id = '4128' OR order_row.product_id = '4176' AND orders.orderstatus > 98 

它只是选择所有内容并忽略日期。 但是,当您删除第二个AND子句时,它会起作用。为什么?

+0

列orderdatum是否可以为空? –

+1

哪个数据类型是列orderdatum? – facundofarias

+1

显示您的表格定义以及预期的输出 –

回答

1

and具有较高的operator precedence这意味着and结合强于or。用括号把条件一起

where orderdatum >= '2015-09-01' 
and orderdatum < '2015-09-05' 
and 
(
    order_row.product_id = '4118' 
    or order_row.product_id = '4128' 
    or order_row.product_id = '4176' 
) 
and orders.orderstatus > 98 

或在您的情况使用IN

where orderdatum >= '2015-09-01' 
and orderdatum < '2015-09-05' 
and order_row.product_id in ('4118', '4128' , '4176') 
and orders.orderstatus > 98 
+0

非常感谢!!!!有用!! – mickey

0

其实你在最后有一个问题,你应该使用,而不是ANDIN操作。

product_id IN ('4118', '4128' , '4176')