1

我不知道该怎么说,因为我现在有点困惑,所以在我尝试解释时请耐心等待,我有一个包含以下字段的表格:

OrderLineID, OrderID, OrderLine, and a few other unimportant ones.

OrderLineID 是主键并且始终是唯一的(这不是问题),OrderID 是不唯一的外键(也不是问题),OrderLine 是在表中不是唯一的值,但应该对于任何相同的 OrderID 来说都是唯一的......所以如果这没有意义,也许是一张图片......

OrderLineID, OrderID, OrderLine
     1          1         1
     2          1         2
     3          1         3
     4          2         1
     5          2         2

对于所有 OrderID,都有一个唯一的 OrderLine。我正在尝试创建一个插入语句,该语句获取特定 OrderId 的最大 OrderLine 值,以便我可以增加它,但它工作得不是很好,我可以使用一些帮助。我现在拥有的是下面,我在程序中构建 SQL 语句并将 OrderID # 替换为实际值。我很确定问题出在嵌套的 select 语句上,并增加了结果,但我找不到任何这样做的例子,因为我的谷歌技能显然很弱......

INSERT INTO tblOrderLine (OrderID, OrderLine) VALUES 
       (<OrderID #>, (SELECT MAX(OrderLine) 
                       FROM tblOrderLine WHERE orderID = <same OrderID #>)+1)

你能帮忙的话,我会很高兴。

4

4 回答 4

0

您是否遇到某种类型的错误?您的 SQL 代码对我来说似乎工作正常。

于 2010-04-02T05:41:09.010 回答
0

不要使用 VALUES 和 SELECT 的组合。尝试:

INSERT INTO tblOrderLine (OrderID, OrderLine)
SELECT <OrderID #>, MAX(OrderLine)  
FROM tblOrderLine 
WHERE orderID = <same OrderID #>)+1
;
于 2010-04-02T06:03:46.797 回答
0

向查询结果添加标量通常不符合规定。尝试移动“+1”:

INSERT INTO tblOrderLine (OrderID, OrderLine) VALUES
(
<OrderID #>,
(SELECT MAX(OrderLine)+1 FROM tblOrderLine WHERE orderID = <OrderID #>)
)

于 2010-04-02T09:12:56.410 回答
0

此语句在 Access 2003 中有效。您必须在 WHERE 子句中替换您的 OrderID 值。

INSERT INTO tblOrderLine (OrderID, OrderLine)
SELECT
    s.OrderID, 
    s.MaxOrderLine + 1 AS NewOrderLine
FROM (
    SELECT
        OrderID, 
        Max(OrderLine) AS MaxOrderLine
    FROM
        tblOrderLine
    WHERE
        OrderID=1
    GROUP BY
        OrderID
    ) AS s;

我阅读了其他人的疑虑,并将这种方法的智慧留给您。如果您可以让多个用户同时更新 tblOrderLine,它会变得更有趣。

于 2010-04-02T13:52:26.293 回答