2012-03-01 97 views
0

我正在寫一個MYSQL查詢來更新數據庫後添加到Oportunitati表的新列,但嵌套的ifs不像我所期望的那樣工作。該查詢是:嵌套的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')))))) 

我期望這個查詢來Stadiu設置爲1,如果Probabilitate是0和20之間,以2,如果它是20和40,等等,最後6,如果它是100和7之間,如果它是在

然而,即使我在所有的括號中都有值,這個查詢設置的唯一值是1和7。是否有任何關於嵌套的IF在mysql中我缺少的東西?使用case代替嵌套if

+0

爲什麼所有的數字都包裹在apostroph中ES? – StilesCrisis 2012-03-01 08:17:08

+0

只是一個自高中起就一直伴隨着我的習慣。不要認爲這有什麼不同。 – Bogdan 2012-03-01 08:18:57

+1

你應該放棄這種習慣。數字不是字符串。 – StilesCrisis 2012-03-01 08:19:37

回答

1

在這種情況下,優選:

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 2012-03-01 08:31:10

+0

不用擔心mysql爲你的類型輸入 – triclosan 2012-03-01 08:33:08

+0

不知道,除去那些固定它,所以一定是它。 – Bogdan 2012-03-01 08:53:37

0

也試試這個查詢 -

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

如果你有消極Probabilitate再添加一個條件 -

IF(Probabilitate <= 100, IF(Probabilitate < 0, 0, Probabilitate) DIV 20 + 1, 7)