mysql - 错误1093(HY000): You can't specify target table

标签 mysql sql

我阅读了已经发布的问题答案,但最终没有帮助。
所以我知道在 MySQL 中,您不能修改在 SELECT 部分中使用的同一张表。
但是:下面的 SQL 语句如何工作?

update keys_from_table_sorted
set    l.nummer =
   (select @curRow := @curRow + 1 AS row_number
   from   keys_from_table_sorted l
   join   (select @curRow := 0) r);

我尝试使用 select 语句中的 row_number 更新表“keys_from_table_sorted”中的字段“nummer”。

最佳答案

你可以这样做

SET @curRow := 0;
UPDATE keys_from_table_sorted
   SET nummer = (@curRow := @curRow + 1)
 ORDER BY <column_name> -- You should specify order 

注意:除非使用 ORDER BY 子句,否则不能保证记录的顺序。因此,无论是 SELECT 还是 UPDATE,始终明确指定它。否则你可能会得到毫无意义的行号。

这里是SQLFiddle 演示

关于mysql - 错误1093(HY000): You can't specify target table,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20631370/

相关文章:

mysql - 当列在 mysql 中同时包含待处理和已完成时,如何在状态列中显示部分待处理

mysql - JPA -表列引用作为两个不同表的外键

mysql - 选择一个表中的 ID 存在于一个或多个其他表中的记录

sql - 无法更改 View 列 SQL 的数据类型

php - 计算大于 20 的值的数量

mysql - 计算实体,在 Doctrine2 中?

php - 从数据库中检索某些值时出现问题

mysql - 条件sql查询

sql - 更新主表的复杂sql查询

SQL Pivot 无聚合