You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

重新生成主键列整数从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;

逻辑说明:

  1. 子查询通过ROW_NUMBER() OVER (ORDER BY id ASC)生成按原ID排序的行号,减1后得到从0开始的新ID
  2. 通过JOIN将原表与子查询结果按原ID(oldid)关联,确保每一行都匹配到对应的新ID
  3. 执行更新:将新ID赋值给id列,原ID赋值给ex列

执行后你的表数据会变为期望的结果:

+-----------+----------+
| id        | ex       |
+-----------+----------+
| 0         | 24       |
| 1         | 25       |
| 2         | 27       |
| 3         | 29       |
| 4         | 30       |
+-----------+----------+

内容的提问来源于stack exchange,提问作者Amin Gholibeigian

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 15:02:11