为MySQL查询添加更多IF条件

时间:2014-06-09 09:15:50

标签: mysql

我使用if else条件基于一个列值更新两列。如果col1为空,则通过添加随机数更新col2。否则通过添加随机数来更新col1。

这是我的查询

UPDATE table SET 
col2=IF(col1='' OR col1 IS NULL, IFNULL(col2,0)+FLOOR($min+(RAND()*($max-$min+1))), col2),
col1=IF(col1='' OR col1 IS NULL, col1, col1+FLOOR($min+(RAND()*($max-$min+1)))) 
WHERE id >= $id

我想再添加一个条件,仅当col1和col2小于允许值(变量)时更新,即仅在col1<$allowed value时更新col1,仅在col2<$allowed value

时更新col2

我试过这样但是没有用

UPDATE table SET 
col2=IF(col1='' OR col1 IS NULL, IFNULL(col2,0)+FLOOR($min+(RAND()*($max-$min+1))), col2),
col1=IF(col1='' OR col1 IS NULL, col1, col1+FLOOR($min+(RAND()*($max-$min+1)))) 
WHERE id >= $id AND col1<$allowed_value AND col2<$allowed_value

如果我从查询中删除任何一个条件,它就像

一样
WHERE id >= $id AND col1<$allowed_value 
WHERE id >= $id AND col2<$allowed_value

我也尝试过这种方式,但它没有工作

UPDATE table SET 
col2=IF(col1='' OR col1 IS NULL AND col2<$allowed_value, IFNULL(col2,0)+FLOOR($min+(RAND()*($max-$min+1))), col2),
col1=IF(col1='' OR col1 IS NULL AND col1<$allowed_value, col1, col1+FLOOR($min+(RAND()*($max-$min+1)))) 
WHERE id >= $id AND col1<$allowed_value AND col<$allowed_value

查询预期的样本数据

col1 col2 allowed value
NULL NULL  1000        //update col2 only but only update if less than allowed value
20   NULL  1000        //update col1 only but only update if less than allowed value
NULL 20    1000        //update col2 only but only update if less than allowed value

请参阅并建议任何可行的方法。

由于

1 个答案:

答案 0 :(得分:1)

您需要在IF语句中包含这些额外条件,如下所示:

UPDATE table SET 
col2=IF((col1='' OR col1 IS NULL) AND IFNULL(col2,0)<$allowed_value, IFNULL(col2,0)+FLOOR($min+(RAND()*($max-$min+1))), col2),
col1=IF(col1='' OR col1 IS NULL OR col1>=$allowed_value, col1, col1+FLOOR($min+(RAND()*($max-$min+1)))) 
WHERE id >= $id

工作演示:http://sqlfiddle.com/#!2/c0b11/1