2010-11-24 10 views
4

これはどのような順序で評価されますか。私の意図は、fooまたはbarのいずれかを見つけると、lolとroflも検索するということです。
これは完全に森の中ですか?もしそうなら、そのような表現をどのように評価するのでしょうか?'foo' OR 'bar' AND 'lol' OR 'rofl' MySQL

答えて

6

The AND operator has higher precedence than OR in MySql、あなたの現在の式のように評価して:あなたは評価の順序を強制したい場合は

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

は、式に括弧を追加します。

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

は非常にappriciated。 ORは優先順位が高いという印象を受けていました。ありがとう。 –

1

the documentationを見てみましょう - と優先順位が高いので、それは次のように次のようになります。そのORが処理されます後

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

ANDは、最初に処理されます。だから、それは次のようになります。その後

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

を、それが順序を左から右です。

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

はあなたに次のような結果が得られますMS SQL Server:

1 foo 
4 rofl 

だから、それはバーや笑および試用版のFOOを組み合わせて、ROFL別々に次のようになりますようだ:

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

あなたはおそらく何をしたいのか(技術的に)です:

SELECT 
     Id, Name 
    FROM 
     TestTable 
    WHERE 
     ((Name = 'foo') OR (Name = 'bar')) AND ((Name = 'lol') OR (Name = 'rofl')) 
関連する問題