Frage

Ich bin mir nicht sicher, wie man Wort dieser Ursache Ich bin ein wenig im Moment verwirrte, so Bär mit mir, während ich versuchen zu erklären, ich habe eine Tabelle mit den folgenden Feldern:

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

OrderLineID ist der Primärschlüssel und ist immer einzigartig (das ist kein Problem), OrderID ist ein Fremdschlüssel, der nicht eindeutig ist (auch kein Problem), und Orderline ist ein Wert, der nicht eindeutig in der Tabelle , sollte aber für alle OrderIDs eindeutig sein, die gleich sind ... also wenn das nicht Sinn machen, vielleicht ein Bild ...

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

Für alle OrderIDs gibt es eine eindeutige Orderline. Ich versuche, eine Insert-Anweisung zu erstellen, die die max Orderline-Wert für einen bestimmten OrderId bekommt, damit ich sie erhöhen können, aber es ist nicht so gut funktioniert und ich konnte ein wenig Hilfe gebrauchen. Was ich jetzt habe, ist unten, ich die SQL-Anweisung in einem Programm erstellen und OrderID # mit einem tatsächlichen Wert ersetzen. Ich bin ziemlich sicher, dass das Problem mit der verschachtelten select-Anweisung, und das Ergebnis erhöht wird, aber ich kann keine Beispiele finden, die dies tun, da meine Google Fähigkeiten schwach sind offenbar ....

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

Jede Hilfe wäre schön.

War es hilfreich?

Lösung

Diese Anweisung funktioniert in Access 2003. Sie haben würde Ihr OrderID Wert in der WHERE-Klausel.

ersetzen
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;

Ich las die anderen Bedenken, und die Weisheit dieses Ansatzes auf Sie verlassen. Es könnte schon interessanter, wenn Sie mehrere Benutzer aktualisieren tblOrderLine zur gleichen Zeit haben.

Andere Tipps

Sind Sie irgendeine Art von Fehler zu bekommen? Ihr SQL-Code scheint zu funktionieren für mich.

Seien Sie nicht eine Kombination von Werten und SELECT verwenden. Versuchen Sie:

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

einen Skalar mit dem Ergebnis einer Abfrage hinzuzufügen ist im Allgemeinen nicht koscher. Versuchen Sie bewegen die "+1":

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

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top