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

did*_*ido 6 mysql if-statement

我想在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;
Run Code Online (Sandbox Code Playgroud)

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

UPDATE table
SET A = IF(A > 20, 20, IF(A < 20, A, 0));
Run Code Online (Sandbox Code Playgroud)

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

JYe*_*ton 11

我认为你在那里99%:

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

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

编辑:

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

UPDATE table SET A = 20 WHERE A > 20;
UPDATE table SET A = 0 WHERE A <= 1;
Run Code Online (Sandbox Code Playgroud)

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

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

最后,将A设置为0,其中A小于或等于1似乎不常见.如果你想比1(包括负值)为0,那么你应该换,您只需设置值小于1的值将变为0 <<=.


jen*_*ent 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 )
Run Code Online (Sandbox Code Playgroud)

或者更简单地说,2个陈述

UPDATE Table
SET A = 20 
where A > 20;

UPDATE Table
SET A = 0
where A <= 1;
Run Code Online (Sandbox Code Playgroud)