我不确定如何说出这个原因我此刻有点困惑,所以当我试图解释时请耐心等待,我有一张包含以下字段的表格:
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)
任何帮助都会很好。
答案 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,那么它会变得更有趣。