2016-05-21 13 views
1

Ich versuche, diese Aufgabe, um herauszufinden:Mysql Abfrage/Reihenfolge der Operationen

Liste alle Details jeder Hengst, wenn die Farbinformation nicht null oder nicht leer ist.

Tabelle:

enter image description here

Die folgende scheint nicht zu arbeiten, halte ich auch Informationen über die Stuten auf dem Erhalten:

SELECT * FROM horse 
WHERE (gender='S') 
AND colour IS NOT NULL 
or NOT colour=''; 

dachte ich, dass die Klammer dazu geführt, dass gender='S' würde zuerst "auslösen", aber ich vermute, dass ich die Reihenfolge der Operationen falsch verstehe?

Danke.

Antwort

0

Es gibt ein paar Probleme hier. Erstens hat and eine höhere Priorität als or, so dass Ihre where-Klausel tatsächlich so interpretiert wird, als wäre sie ((gender='S') AND colour IS NOT NULL) or (NOT colour=''). Zweitens, selbst wenn Sie die Klammern korrekt hatten, ist (colour IS NOT NULL NOT colour='') immer wahr - wenn colornull ist, ist es ungleich '', und wenn es '' ist, ist es nicht null. Also, eigentlich brauchen Sie nur eine Reihe von and Bedingungen:

SELECT * 
FROM horse 
WHERE gender='S' AND 
     colour IS NOT NULL AND 
     colour != ''; 
Verwandte Themen