重新生成主键列整数从0开始并保留旧值至ex列,SQL语句失效求助
解决mh_product表主键ID重置并保留原ID到ex列的问题
你的原SQL语句存在两个问题:
- 子查询中
from p引用错误,别名p是外层UPDATE的表别名,子查询无法直接使用,需替换为实际表名mh_product - 缺少关联条件,会导致更新逻辑混乱,必须通过原ID关联原表和子查询结果
以下是可正常运行的SQL语句:
UPDATE mh_product p JOIN ( SELECT id AS oldid, ROW_NUMBER() OVER (ORDER BY id ASC) - 1 AS newid FROM mh_product ) bp ON p.id = bp.oldid SET p.id = bp.newid, p.ex = bp.oldid;
逻辑说明:
- 子查询通过
ROW_NUMBER() OVER (ORDER BY id ASC)生成按原ID排序的行号,减1后得到从0开始的新ID - 通过
JOIN将原表与子查询结果按原ID(oldid)关联,确保每一行都匹配到对应的新ID - 执行更新:将新ID赋值给
id列,原ID赋值给ex列
执行后你的表数据会变为期望的结果:
+-----------+----------+ | id | ex | +-----------+----------+ | 0 | 24 | | 1 | 25 | | 2 | 27 | | 3 | 29 | | 4 | 30 | +-----------+----------+
内容的提问来源于stack exchange,提问作者Amin Gholibeigian
相关产品推荐
相关产品推荐

