2014-05-13 39 views
0

我想更新一列,其值为0到该列的最大值(在单个查询中)。在单个查询的每个更新中将列更新为最大列数。

有很多0值的记录。

我这样做:

UPDATE table SET field = (SELECT MAX(field) + 1) WHERE field = 0; 

但它更新每个记录相同的值。 我们可以在每一行更新中获得最大值吗?

+2

我不明白:为什么最大值应该在每次更新时都改变? Max是最大值,并且即使在更新后也总是一样.. –

+1

可以提供表格结构 – Snehal

+0

@Lorenzo Marcon假设有3条记录,如果它更新第一个到最大值说101其余两个应该是102和103.但它把101放在每个。 – Vitthal

回答

2

您似乎想要增量从下一个可能值开始的值。这里有一种方法:

update table t cross join 
     (select @rn := max(field) from table) var 
    set t.field = (@rn := @rn + 1) 
    where field = 0; 
+0

它的工作:)只是稍微修正... '更新表t交叉连接(选择@rn:=(从表中选择最大(字段)))var set t.field =(@rn:= @rn + 1)where field = 0;' – Vitthal

+1

@Vitthal。 。 。它不需要额外的子查询。该查询已修复。 –

+0

是的..你是对的。谢谢..!! – Vitthal