In welcher Reihenfolge würde dies ausgewertet werden. Meine Absicht ist, dass, wenn es entweder foo oder bar findet, es auch nach lol und rofl suchen würde.
Ist das total im Wald? Und wenn ja, wie würde man einen solchen Ausdruck bewerten?Wo 'foo' ODER 'bar' UND 'lol' ODER 'rofl' MySQL
4
A
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')
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'))
Sehr viel appriciated. War unter dem Eindruck, dass OR eine höhere Priorität hatte. Vielen Dank. –