mysql查询将字段更新为max(field)+ 1

Posted

技术标签:

【中文标题】mysql查询将字段更新为max(field)+ 1【英文标题】:mysql query to update field to max(field) + 1 【发布时间】:2011-03-20 21:49:00 【问题描述】:

我想做的是:

UPDATE table SET field = MAX(field) + 1 WHERE id IN (1, 3, 5, 6, 8);

在我看来,这个语句的语义首先是数据库会启动并为我确定field 在所有table 中的最大值是多少。然后它将对该值加 1,并将结果值分配给 id 1、3、5、6 和 8 行的 field 列。看起来很简单......

但是,当我尝试运行该查询时,mysql 卡住它并说:

ERROR 1111 (HY000): Invalid use of group function

你必须使用什么秘诀才能得到我想要的结果?

问候, 维克

【问题讨论】:

【参考方案1】:

试试

UPDATE TABLE set field = ((SELECT selected_value FROM (SELECT MAX(field) AS selected_value FROM table) AS sub_selected_value) + 1) WHERE id in (1,3,5,6,8)

【讨论】:

你确实打败了我,但你缺少一个右括号:P【参考方案2】:

为了绕过mysql-error-1093,使用子查询/派生表/内联视图:

UPDATE table
      SET field = (SELECT x.max_field
                          FROM (SELECT MAX(t.field) + 1 AS max_field
                                        FROM TABLE t
                                       WHERE t.id IN (1,3,5,6,8) ) x)

【讨论】:

t.id IN (1,3,5,6,8) **)** x) 后面少了一个括号

以上是关于mysql查询将字段更新为max(field)+ 1的主要内容,如果未能解决你的问题,请参考以下文章

更新查询 - 设置 new_field = existing_field

SQL中如何遍历表并更新某个字段的值

《MongoDB入门教程》第16篇 文档更新之$min/$max操作符

《MongoDB入门教程》第16篇 文档更新之$min/$max操作符

如何从 MSSQL 连接查询中的字段中获取表名? (mysql_field_table 等效)

通过字符串访问/更新查询结果的字段[重复]