更新 MySQL 表中子记录的序数

问题描述 投票:0回答:1

MySQL数据库

article
中的每一行在
price
中都有0到10行, 但是
ordNum
是空的,因为我几年后添加了它。

是否有一个单行代码可以设置

ordNum
,以便每篇文章的价格从
1
n
的值? 例如,有 3 个价格的商品应将其
ordNum
设置为
1
2
3

价格的顺序并不重要,但如果能考虑到的话,那就是一个附加值。

文章:

CREATE TABLE `article` (
    `id`   INT(11) NOT NULL,
    `name` TEXT    NULL DEFAULT NULL
);

价格:

CREATE TABLE `price` (
    `id`          INT(11)     NOT NULL,
    `amount`      VARCHAR(24) NULL DEFAULT NULL,
    `article_id`  INT(11)     NULL DEFAULT NULL,
    `currency_id` INT(11)     NULL DEFAULT NULL,
    `ordNum`      INT(11)     NULL DEFAULT NULL
);
sql mysql foreign-keys relational-database
1个回答
0
投票
WITH cte AS (
  SELECT id, ROW_NUMBER() OVER (PARTITION BY article_id ORDER BY amount) AS ordNum
  FROM price
)
UPDATE price JOIN cte USING (id)
SET price.ordNum = cte.ordNum;

这需要 MySQL 8.0 用于 CTE 和窗口函数。

ORDER BY
只是一个例子;如果您愿意,您可以选择其他订单。

© www.soinside.com 2019 - 2024. All rights reserved.