mysql - 如何使用字段的最大值编写更新查询?

标签 mysql sql

我想执行此查询,但出现错误。我怎样才能运行这种类型的查询?

UPDATE `user` 
SET id = (SELECT (MAX(t.id)+1) as id FROM `user` as t)
WHERE id='';

错误信息是:

[SQL]UPDATE `user`  SET id = (SELECT (MAX(t.id)+1) as id FROM `user` as t) WHERE id='' LIMIT 1; 
[Err] 1093 - You can't specify target table 'user' for update in FROM clause

我的表场景是

--------------
|User        |
--------------
| id  | name |
--------------
| 101 | A    |
--------------
|     | B    |
--------------
|     | C    |
--------------
|     | D    |
--------------

我想这样更新

--------------
|User        |
--------------
| id  | name |
--------------
| 101 | A    |
--------------
| 102 | B    |
--------------
| 103 | C    |
--------------
| 104 | D    |
--------------

最佳答案

您可以使用变量来实现您的需要。

set @rownum:=101;
update user set id = @rownum:=@rownum+1 where id is null

Check Demo Here

关于mysql - 如何使用字段的最大值编写更新查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34039116/

相关文章:

java - 有没有办法在 Java App Engine 中重用 MySQL Db 连接

sql - 使用JDBC进行SQLite查询要比使用Firefox SqliteManager插件慢得多

php - Cakephp 数据库表中的网页标题

Mysql多态表?

php - 如何在 PHP/MySQL Web 应用程序中安全地为用户提供新密码?

java.lang.ClassNotFoundException : com. mysql.jdbc.Driver for Maven runnable jar

mysql - 如何通过命令行调整mysql参数的大小

sql - 甲骨文 SQL : Merge rows into single row

php - 如何从表 X 中选择与表 Y 共享最少关系的行?

SQL 到 SOQL 转换 (Salesforce.com SOQL)