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

如何为MySQL中关联的price表记录批量更新ordNum序号?

为关联的price表按article分组设置ordNum的单行语句方案

一、MySQL 8.0及以上版本(推荐)

利用MySQL 8.0新增的窗口函数ROW_NUMBER(),可以轻松实现按article_id分组为每条price记录编号,同时支持自定义排序规则:

基础版(不指定排序,按数据库默认顺序编号)

UPDATE price p
JOIN (
    SELECT 
        id,
        ROW_NUMBER() OVER(PARTITION BY article_id) AS rn
    FROM price
) AS temp ON p.id = temp.id
SET p.ordNum = temp.rn;

带排序版(例如按金额升序排序后编号)

如果需要按价格金额排序后编号,只需在OVER()子句中添加ORDER BY。注意amount是VARCHAR类型,需先转为数值类型避免排序错误:

UPDATE price p
JOIN (
    SELECT 
        id,
        ROW_NUMBER() OVER(PARTITION BY article_id ORDER BY CAST(amount AS DECIMAL) ASC) AS rn
    FROM price
) AS temp ON p.id = temp.id
SET p.ordNum = temp.rn;

二、MySQL 5.7及以下版本(无窗口函数)

通过用户变量实现分组计数,需处理变量初始化和分组切换逻辑:

UPDATE price p
JOIN (
    SELECT 
        id,
        @row_num := IF(@current_article = article_id, @row_num + 1, 1) AS rn,
        @current_article := article_id
    FROM price, (SELECT @row_num := 0, @current_article := NULL) AS init
    -- 可选:添加ORDER BY指定排序规则,例如 ORDER BY article_id, amount ASC
) AS temp ON p.id = temp.id
SET p.ordNum = temp.rn;

注:若需排序,在子查询末尾添加ORDER BY子句即可确保分组内记录按预期顺序编号。

补充说明

虽然问题涉及两个关联表,但核心逻辑是对price表按article_id(关联article表的外键)分组编号,无需直接关联article表即可完成操作——price表的article_id已建立与article表的关联,分组时直接使用该字段即可对应到每个article的price记录。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 21:23:10