在SQL插入期间增加非唯一字段

时间:2010-04-02 05:30:41

标签: sql ms-access insert field increment

我不确定如何说出这个原因我此刻有点困惑,所以当我试图解释时请耐心等待,我有一张包含以下字段的表格:

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。我正在尝试创建一个insert语句,它获取特定OrderId的最大OrderLine值,所以我可以增加它,但它不能很好地工作,我可以使用一些帮助。我现在所拥有的是,我在程序中构建SQL语句并用实际值替换OrderID#。我很确定问题出在嵌套的select语句中,并且增加了结果,但我找不到任何这样做的例子,因为我的Google技能显然很弱......

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

任何帮助都会很好。

4 个答案:

答案 0 :(得分:0)

您是否收到某种类型的错误?您的SQL代码似乎对我来说很好。

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

在查询结果中添加标量通常不是犹太教。尝试移动“+1”:

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

答案 3 :(得分: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,那么它会变得更有趣。