2012-03-01 98 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)