简单的SQL和OR不工作

时间:2015-10-12 22:18:23

标签: sql boolean-logic

SELECT *
FROM Items
WHERE (Balance >= 0) OR (Item Like '%XF%' AND Balance > 0)

这将使用balance >= 0返回所有项目。

我需要它报告所有带balance >=0 OR的项目... 所有项目balance > 0(但不等于0)并且有' XF'在项目编号。

Item 1234 - Balance 0
Item 1234 - Balance 25    
Item 1234-XF - Balance 25    
Item 1234-XF - Balance 0 <-- should not be here because it is an XF and has a balance of 0.

为什么这不起作用?如果我单独做各自的话,它确实有效,所以我不确定为什么我不能将这两者结合起来。

3 个答案:

答案 0 :(得分:5)

它正在做你要求它做的事情。如果SELECT item_id, COUNT(*) FROM log WHERE access_time >= DATE_SUB(CURDATE(), INTERVAL 1 HOUR) GROUP BY item_id ORDER BY 2 DESC LIMIT 10 为真,那么Balance > 0必须为真,Balance >= 0是否为真无关紧要。

我认为你真的想要这样的东西:

Item Like '%XF%'

答案 1 :(得分:0)

除了一个值XF = 0之外,SQL语句具有良好的工作结果。根据声明,它不应该存在,因为你只想要XF大于0.

也许你可以试试

WHERE (Balance >= 0) OR (Item Like '%XF%' AND Balance >= 1)

请记住,0.01也大于0

答案 2 :(得分:-1)

通常使用OR语句首先评估第一个语句,如果为真,则不考虑第二个语句,在这种情况下,该记录将被视为与逻辑匹配并返回。表达式的性质:(余额&gt; = 0)OR(项目如'%XF%'和余额&gt; 0)表示如果第一个为假,则第二个永远不会为真。

请改为尝试:

SELECT * FROM Items WHERE (Item Like '%XF%' AND Balance > 0) OR (Balance = 0)