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
);
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
只是一个例子;如果您愿意,您可以选择其他订单。