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ステートメントと結果のインクリメントに問題があると確信していますが、Googleのスキルが明らかに弱いため、これを行う例を見つけることができません....

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

どんな助けでもいいでしょう。

4

4 に答える 4

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 に答える
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 に答える