2012-03-01 12 views
0

Oportunitatiテーブルに新しい列を追加した後にデータベースを更新するMYSQLクエリを作成していますが、ネストされたifが期待通りに動作しません。クエリは次のとおりです。ネストされたIF文は期待通りに機能しませんか?

UPDATE Oportunitati SET Stadiu = 
if(Probabilitate < '20', '1', 
if(Probabilitate < '40', '2', 
if(Probabilitate < '60', '3', 
if(Probabilitate < '80', '4', 
if(Probabilitate < '100', '5', 
if(Probabilitate = '100', '6', '7')))))) 

それはだ場合、それは100と7だ場合、私はそれが20と40の間だ場合など、2に、Probabilitateは0と20の間にある場合は、このクエリは1にStadiuを設定することを期待し、最終的には6でしょうしかし、私は全ての括弧内の値を持っていてもカントー、

上でのみ値がこのクエリセットは1であり、7は私が欠けているMySQLでのネストされたのIFについては何がありますか?

+0

なぜすべての数字がアポストロフィで包まれているのですかes? – StilesCrisis

+0

高校時代から私と付き合っているだけの習慣。ここで違いがあるとは思わないでください。 – Bogdan

+1

あなたはその習慣をやめるべきです。数字は文字列ではありません。 – StilesCrisis

答えて

1

代わりに、ネストされたifcaseを使用すると、このような場合に好適である:

UPDATE Oportunitati SET Stadiu = 
CASE 
        WHEN Probabilitate < 20 
            THEN 1 
        WHEN Probabilitate < 40 
            THEN 2 
        WHEN Probabilitate < 60 
            THEN 3 
        WHEN Probabilitate < 80 
            THEN 4 
        WHEN Probabilitate < 100 
            THEN 5 
        WHEN Probabilitate = 100 
            THEN 6 
        ELSE 7 
END 
+0

ありがとう、それを考慮する。問題は実際にはmysqlのすべての価値を守るという悪い習慣でした。ありがたい高校高校のおかげです。 – Bogdan

+0

あなたのためにmysql型のキャストを心配しないでください – triclosan

+0

Dunno、それらを削除して修正しました。 – Bogdan

0

もこの文字列で検索してください -

UPDATE 
    Oportunitati 
SET 
    Stadiu = IF(Probabilitate <= 100, Probabilitate DIV 20 + 1, 7); 

をあなたは否定Probabilitateを持っている場合は、追加1以上の条件 -

IF(Probabilitate <= 100, IF(Probabilitate < 0, 0, Probabilitate) DIV 20 + 1, 7) 
関連する問題