2010-11-24 16 views

Antwort

6

The AND operator has higher precedence than OR in MySql, so dass Ihre aktuellen Ausdruck auswertet als:

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

Klammern zum Ausdruck hinzufügen, wenn Sie die Bewertung, um erzwingen wollen:

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

Sehr viel appriciated. War unter dem Eindruck, dass OR eine höhere Priorität hatte. Vielen Dank. –

1

einen Blick auf the documentation - und hat eine höhere Priorität, so würde es so aussehen:

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

AND wird zuerst verarbeitet werden, danach OR verarbeitet werden. Also, es wird sein:

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

Danach ist es links nach rechts.

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

geben Sie das folgende Ergebnis in MS SQL Server:

1 foo 
4 rofl 

es scheint So wird es bar kombinieren UND lol und evals foo und rofl seperat wie folgt aus:

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

Was Sie wahrscheinlich wollen, ist (technisch):

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