2016-10-24 16 views
0

クエリのWHERE句で "連鎖不等式"構文を使用しても、適切な構文で記述された同様の精神とは異なる結果が生成されると、MySQLは文句を言わない。どのような制約が適用されているのですか?そして、なぜそれはエラーを生成しないのですか?MySQL連鎖不等式

単純な例:MySQLデータベースに、テーブルscoreという名前のUserというテーブルがあるとします。

SELECT * 
FROM User 
WHERE 10 < score < 15; 

と適切な構文を使用して、次の形式のクエリ:異なる結果と

SELECT * 
FROM User 
WHERE score > 10 AND score < 15; 

は私が連鎖不平等の構文を使用して、次の形式のクエリを記述することができます。

  1. 実際連鎖不平等で実行されていることは何の問合せ:質問を繰り返す

    ? (特に、適用される制約は何ですか?)

  2. MySQLでエラーが発生しないのはなぜですか? documentationによれば

答えて

2

: 表現内で同じ優先レベルで発生するオペレータについて

は、評価進む 割り当ては右から左に評価することを除いて、左から右へ。

MySQLはこれを評価するための:MySQLは数値コンテキストで数字としてブール値を扱うので(scoreNULLある場合又はNULL)、括弧内の部分は、0または1になっている

WHERE (10 < score) < 15 

その後の比較。したがって、結果は常に真です。

これは、MySQLがエラーを生成しない理由と、あなたが期待しているものと異なる結果を得る理由の両方を説明していると思います。

あなたはANDを使用して、さまざまなオプションを持っているが、これは典型的な次のようになります。

WHERE score > 10 AND score < 15