如何在MySQL更新查询中使用If Then Else?

时间:2012-03-15 15:37:52

标签: mysql if-statement

我想像MySQL一样更新MySQL中的表:

UPDATE Table
SET A = '20' IF A > 20
SET A = A    IF A < 20 
SET A = 0    IF A <= 1
WHERE A IS NOT NULL;

但是上面的SQL语法无效。我也试过这个:

UPDATE table
SET A = IF(A > 20, 20, IF(A < 20, A, 0));

但语法也无效。如何在这样的更新查询中使用if语句?

2 个答案:

答案 0 :(得分:11)

我认为你在那里99%:

UPDATE table
SET A = IF(A > 20, 20, IF(A < 20 && A > 1, A, 0))
WHERE A IS NOT NULL;

&& A > 1添加到第二个IF语句,并满足您的第三个条件。

修改

Per @ Andre对问题的评论以及嵌套IF难以阅读的建议,您也可以将其作为一些不做任何不必要的工作且可读的查询:

UPDATE table SET A = 20 WHERE A > 20;
UPDATE table SET A = 0 WHERE A <= 1;

当A为NULL时,它将不满足这​​些条件中的任何一个,因此无需指定A不为NULL。

接下来,没有必要像@Andre建议的第三个条件。如果A介于1和20之间,它将保持原样。

最后,将A设置为0,其中A小于或等于1似乎不常见。值1将更改为0.如果您只想将小于1的值(包括负值)设置为0,则应将<替换为<=

答案 1 :(得分:5)

UPDATE Table
SET A = Case
When A > 20 Then 20 
When A <= 1 Then 0
End
WHERE A IS NOT NULL and ( A > 20 or A <= 1 )

或更简单地说,2个陈述

UPDATE Table
SET A = 20 
where A > 20;

UPDATE Table
SET A = 0
where A <= 1;