我使用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
我试过这样但是没有用
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
请参阅并建议任何可行的方法。
由于
答案 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