问题描述
我创建了以下 MysqL 表,但不确定如何正确自动增加 entry_id。理想情况下,自动增量适用于每个 order_id。例如,如果订单 ID 1 有 3 个条目,那么这些条目的 ID 将是 1、2、3。同样,如果订单 id 2 有 3 个条目,那么这些条目也将具有条目 ID 1、2、3。这可以实现吗?
/* Table `ims`.`OrderEntries` */
CREATE TABLE IF NOT EXISTS `ims`.`OrderEntries` (
`ENTRY_ID` INT NOT NULL AUTO_INCREMENT,`ORDER_ID` INT NOT NULL,`ITEM_ID` INT NOT NULL,`ITEM_NAME_AT_TIME_OF_ORDER` INT NOT NULL,`ITEM_COST_AT_TIME_OF_ORDER` DECIMAL NOT NULL,`ITEM_QUANTITY` INT NOT NULL,PRIMARY KEY (`ORDER_ID`,`ITEM_ID`)
);
解决方法
您甚至不需要费心去实现它,尤其是随着支持 ROW_NUMBER
的 MySQL 8+ 的出现。要生成您在上面描述的系列,您可以简单地使用:
SELECT ENTRY_ID,ORDER_ID,ROW_NUMBER() OVER (PARTITION BY ORDER_ID ORDER BY ENTRY_ID) SEQ
FROM OrderEntries
ORDER BY ORDER_ID,ENTRY_ID;
这将生成如下所示的内容:
ENTRY_ID | ORDER_ID | SEQ
1 | 1 | 1
2 | 1 | 2
3 | 1 | 3
4 | 2 | 1
5 | 2 | 2
6 | 2 | 3