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

如何在MySQL更新查询中使用If-Then-Else?,mysql,if-statement,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; 更新表 如果A>20,则设置A='20' 如果A20或A UPDATE Table SET A = 20 where A > 20; UPDATE Table SET A = 0 where A <= 1; UP

我想在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;
更新表
如果A>20,则设置A='20'
如果A<20,则设置A=A
如果A为20,20,如果(A<20,A,0)),则设置A=0;
但是也是无效的语法。如何在这样的更新查询中使用if语句?

更新表
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 )
设置一个=案例 当A>20时,则为20 当一个20或一个20; 更新表 设置A=0
其中A我认为你99%都在那里:

UPDATE table
SET A = IF(A > 20, 20, IF(A < 20 && A > 1, A, 0))
WHERE A IS NOT NULL;
当A为NULL时,它将不满足这两个条件之一,因此无需指定A不为NULL

其次,没有必要像@Andre建议的那样满足第三个条件。如果A在1到20之间,它会保持原样


最后,如果A小于或等于1,则将A设置为0似乎很不寻常。值1将更改为0。如果您打算简单地将小于1的值(包括负值)设置为0,那么您应该交换
大小写是否应该省略单引号以使用int值(而不是像“20”和“a”等字符串文字)?这说明了,他的原版具有类似的类型不匹配,我不想猜测这一点。虽然如果存储的值是int,将其与'20'进行比较将在mysql中起作用,同样地,将其设置为'20'也将起作用,因为mysql将计算并转换字符串int。但是'A'将导致类型错误。您不需要第二种情况。Set A=A不做任何事情。在where子句中筛选此项应该更快:
其中A不为NULL且(A>20或A
UPDATE Table
SET A = 20 
where A > 20;

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