我想像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语句?
答案 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;