2011-02-07 21 views
0

私はmysqlで変数の代入を使用していますが、奇妙な動作が見つかりました。私は条件がこの順番で解析されたことを考えていたmysqlで変数を代入する

SET @v1=0; 
SET @v2=0; 

SELECT @v1, @v2 
FROM MyTable table 
WHERE (@v1:[email protected]) is not null 
    AND (@v2:=2) is not null; 

: 最初(@v1:[email protected]) is not null

(@v2:=2) is not null後ので、結果がでなければなりません:

@v1 | @v2 
--------- 
0 | 2 

このクエリを参照してください。

しかしこれはそうではありません。このクエリを試してください:

@v1 | @v2 
--------- 
2 | 2 

なぜですか?

答えて

1

SQLは宣言型言語なので、条件を記述した順に評価されるとは限りません。あなたはエンジンにを教えてください。あなたが望むのはです。それは無料です。を入手してください。

0

オプティマイザは、WHERE句の式の順序をクエリと同じにする必要はありません。特定の評価順序に依存することはできません

0

クエリオプティマイザは、任意の方法でコードを書き換えて実行することができます。期待どおりに働くことに依存しないでください。

関連する問題