用循环更新表

时间:2016-01-31 14:36:26

标签: python mysql sql database iteration

您好我想通过在每次迭代中选择该列中的最小值并将其增加10%来更新列,直到列的总和变为特定值(比如3000)

UPDATE db1.tb1 a 
SET    a.col1 = IF(SUM(a.col1) < 3000, a.col1 + ( a.col1 / 10 ), a.col1) 
WHERE  a.col1 IN (SELECT Min(b.col1) 
                  FROM   (SELECT col1, 
                                 col2 
                          FROM   db1.tb1), 
                         b) 

1 个答案:

答案 0 :(得分:1)

我认为你不能在一个update声明中做到这一点。你可以重复循环。每次迭代看起来都更像这样:

update tb1.tbl t cross join
       (select min(col1) as min1, sum(col1) as sum1
        from tb1.tbl
       ) tt
    set col1 = 1.1 * col1
    where tt.sum1 < 3000 and t.col1 = tt.min1
    limit 1;

请注意limit 1,因此只更新了一行。然后,您可以计算已修改行的数量(例如,使用mysql_affected_rows())。当它为0时,则停止。

如果要在MySQL中进行循环,也可以在MySQL存储过程中进行设置。