【发布时间】:2021-08-18 17:12:18
【问题描述】:
我正在尝试创建一个使用复合主键的表。这个想法是我们有一个订单“数字”(字符串)和一个行号(整数)。插入表格时,订单号是已知的,但没有已知或分配的行号;我希望它自动生成为该订单号的最低行号。
我尝试使用复合主键(orderNumber,lineNumber)并将 lineNumber 设置为 NULL,无论是否将 lineNumber 字段设置为 NOT NULL。我也尝试过在 lineNumber 上使用 AUTOINCREMENT,但是,这只会给我一个语法错误。
我正在编写的程序使用 c++,所以我的意思是最坏的情况,我可以自己查询 orderNumber 并在插入一行之前计算要插入的 lineNumber,但这似乎不是最佳选择。有什么建议吗?
示例数据:
| orderNumber | SKU | etc |
|---|---|---|
| abc123 | xyz | etc |
| def456 | xyz | etc |
| abc123 | wxc | etc |
| ghi645 | wxc | etc |
| abc123 | hk4 | etc |
| def456 | hk4 | etc |
在表中插入这些行后,应该是
| orderNumber | lineNumber | SKU | etc |
|---|---|---|---|
| abc123 | 1 | xyz | etc |
| def456 | 1 | xyz | etc |
| abc123 | 2 | wxc | etc |
| ghi645 | 1 | wxc | etc |
| abc123 | 3 | hk4 | etc |
| def456 | 2 | hk4 | etc |
【问题讨论】:
-
发布样本数据和预期结果以阐明您想要什么。
-
您希望将其作为表格中的新列吗?如果删除一行会发生什么?这应该通过 SELECT 查询来完成。另外,您是否有一列表示行的顺序?表是无序的数据集。没有第一行、下一行、上一行或最后一行。
-
嗯嗯嗯,这是一个全新的数据库,所以我猜它会是一个新的专栏?不知道你的意思是什么。如果删除了一行,最好使用现在删除的行号,但如果这太难了,那么只使用最高行之后的下一行就可以了。我不明白为什么行顺序的列很重要 - 这将由选择查询的排序处理。
-
我猜你的建议是在插入时,为 orderNumber 运行 select 语句,从集合中获取最高的连续 lineNumber,将其增加 1,然后插入?我希望有比这样做更有效的方法,但如果这是必须发生的,那就是它的样子。
-
我的意思是,如果您删除带有 (abc123, 2) 的行,您将留下 (abc123,1) 和 (abc123,3) 行。
标签: sqlite max sql-insert