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.
为什么这不起作用?如果我单独做各自的话,它确实有效,所以我不确定为什么我不能将这两者结合起来。
答案 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)