2010-11-24 34 views

Répondre

6

The AND operator has higher precedence than OR in MySql, de sorte que votre expression actuelle est évaluée comme:

WHERE 'foo' OR ('bar' AND 'lol') OR 'rofl' 

Ajouter entre parenthèses à l'expression si vous voulez forcer l'ordre d'évaluation:

WHERE ('foo' OR 'bar') AND ('lol' OR 'rofl') 
+0

Très bien appriciated. Était sous l'impression que OU avait une priorité plus élevée. Merci. –

1

jeter un oeil à the documentation - et a une priorité plus élevée, donc ce serait comme ceci:

WHERE 'foo' OR ('bar' AND 'lol') OR 'rofl' 
4

AND seront traitées en premier lieu, après que OR seront traitées. Donc, ce sera:

'foo' OR ('bar' AND 'lol') OR 'rofl' 

Après cela, il est gauche à droite commande.

0
SELECT 
    Id, Name 
FROM 
    TestTable 
WHERE 
    (Name = 'foo') OR (Name = 'bar') AND (Name = 'lol') OR (Name = 'rofl') 

vous donnera le résultat suivant dans MS SQL Server:

1 foo 
4 rofl 

Il semble donc qu'il combinera bar et lol et evals foo et rofl séparement comme ceci:

SELECT 
     Id, Name 
    FROM 
     TestTable 
    WHERE 
     (Name = 'foo') OR ((Name = 'bar') AND (Name = 'lol')) OR (Name = 'rofl') 

Qu'est-ce que vous voulez sans doute faire est (techniquement):

SELECT 
     Id, Name 
    FROM 
     TestTable 
    WHERE 
     ((Name = 'foo') OR (Name = 'bar')) AND ((Name = 'lol') OR (Name = 'rofl'))