2016-06-08 5 views
2

Ich habe eine Aggregatfunktion in meiner WHERE-Anweisung zusammen mit anderen normalen WHERE-Einschränkungen. Wenn ich alle AND-Anweisungen verwenden, um die WHERE-Anweisung miteinander zu verknüpfen, wird die Abfrage ordnungsgemäß ausgeführt.SQL - brauche einen Weg um mehrere WHERE-Einschränkungen

Allerdings muss ich eine OR-Anweisung verwenden, um die richtigen Daten zu haben. Wenn ich versuche, die Abfrage mit der ODER-Anweisung auszuführen, erhalte ich einen "Divide by Zero" Fehler. Es tritt trotz einer meiner Einschränkungen auf, dass die ExampleQuantity nicht gleich 0 sein kann.

Wie soll ich das umgehen, wo ich sowohl die OR-Anweisung verwenden kann, als auch eine Division durch Null Fehler habe? Ich bin mir sicher, dass es eine einfache Lösung dafür gibt, ich kann es einfach nicht sehen. Hier

ist ein Beispiel für meine Frage:

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

Denken Sie daran, es ist nicht eine prozedurale Sprache so kann der Motor Entscheide die "Reihenfolge der Ausführung" und versuche sogar, etwas parallel auszuführen. In diesem Fall können Sie den Test auf ** ExamplePrice = ExampleAmount * ExampleQuantity ** ändern. – jean

Antwort

4

Wie jean schlägt vor, einfach die Teilung Umschreiben als eine Multiplikation Division durch Null verhindert.

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

Ich denke, Ihr Test falsch sein kann, in der Regel Preis bedeutet Preis pro Einheit und Menge stellt Gesamtpreis

+0

Preis, Menge und Betrag fauler Platzhalter für die tatsächlichen Werte. Ich glaube, dass das Neuschreiben funktionieren wird, aber ich kann es jetzt nicht testen. Ich weiß nicht, warum ich überhaupt nicht daran gedacht habe. – 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; 
Verwandte Themen