2016-06-08 93 views
2

我在我的WHERE语句中有一个聚合函数以及其他更正常的WHERE约束。如果我使用所有AND语句将WHERE语句绑定在一起,那么查询就会正常工作。SQL-需要一个围绕多个WHERE约束的方法

但是,我需要使用OR语句来获得正确的数据。当我尝试使用OR语句运行查询时,我收到一个“除以零” 错误。这是发生,尽管我的限制之一是ExampleQuantity不能等于0.

我应该如何解决这个问题,我可以使用OR语句,并且没有除零错误?我确信有一个简单的解决方案,我只是看不到它。

这是我的查询的示例:

SELECT * 
FROM table1 
WHERE ExampleCode1 BETWEEEN 1 AND 10 
    AND ExampleNo IN (1, 2, 3, 4) 
    **AND/OR** ExampleQuantity =! 0 
    AND ExamplePrice/ExampleQuantity = ExampleAmount 
+8

记住它不是一个程序性的语言从而发动机能够决定“执行顺序”,甚至尝试并行执行。在这种情况下,您可以将测试更改为** ExamplePrice = ExampleAmount * ExampleQuantity **。 – jean

回答

4

作为jean表明,简单地重写分割为乘法避免除以零。

SELECT * 
FROM table1 
WHERE ExampleCode1 BETWEEEN 1 AND 10 
AND ExampleNo IN (1, 2, 3, 4) 
OR ExamplePrice * ExampleQuantity = ExampleAmount 

我想你的测试可能是错误的,通常价格意味着每单位价格和代表总价

+0

价格,数量和金额实际值的懒惰占位符。我相信重写会起作用,但是我现在无法对它进行测试。我不知道为什么我从一开始就没有想到这一点。 – Jabo13

1
SELECT * FROM (
    SELECT * 
    FROM table1 
    WHERE ExampleCode1 BETWEEEN 1 AND 10 
    AND ExampleNo IN (1, 2, 3, 4) 
    AND ExampleQuantity =! 0 
) tab_tmp 
WHERE AND ExamplePrice/ExampleQuantity = ExampleAmount;