0

私がテーブルを持っていると言う

    Parts
    PartID (Primary Key)
    Part Name

    Orders
    OrderID (Primary Key)
    CustID (Foreign Key)

    OrderDetails
    OrderDetailsID (Primary Key)
    PartID (Foreign Key)
    Quantity
    OrderID (Foreign Key)

OrderDetailsから複数のPartIDのパーツ名を取得したい場合、これを行うにはどうすればよいですか?2つのDataTableを使用しますか?これを行うための効率的な方法がわからないため、私は混乱しています。私が考えることができる唯一のことは、SQLを使用してDataTableを作成することです。

    SELECT * FROM OrderDetails WHERE OrderID=OrderID;

次に、Forループを使用して各PartIDを取得し、別のDataTableを作成してそのPartNameを検索し、これを変数に渡します。検索するPartIDは最大10個ある可能性があり、PartID1PartID2などの変数は必要ありません。

問題を効果的に伝えることができたと思います。

ありがとう

編集:

    SQLCmd = "SELECT tblParts.PartID, tblParts.PartName, tblOrderDetails.Quantity, OrderDetails.OrderID FROM tblOrderDetails, tblParts "
    SQLCmd = SQLCmd & "WHERE tblParts.PartID = OrderDetails.PartID AND OrderID=" & OrderID & ";"
4

2 に答える 2

1

を探していると思いますjoin。構文は、使用している SQL の種類によって若干異なりますが、一般的には次のようになります。

SELECT `Part Name`
FROM Parts p
INNER JOIN OrderDetails o ON p.PartID = o.PartID
WHERE o.OrderDetailsID = ...;

私が理解している限り、これにより、両方のテーブルのフィールドを組み合わせた一時テーブルが作成されます。理論的には、2 つの元のテーブルのレコードの可能な組み合わせごとに、結合されたテーブルに 1 つのレコードが作成されます。これを妥当な数に減らすには、関係 を導入しますp.PartID = o.PartID。これにより、ほぼ同じ の組み合わせのみに削減されPartIDます。

内部結合とは、パーツ ID が関連付けられているオーダーからのみ選択し、オーダー内のパーツのみを選択することを意味します。LEFTRIGHTjoin は反対のことを行うことができます。注文に含まれていなくてもすべてのパーツを選択するか (左)、パーツがなくてもすべての注文を選択します (右)。

W3Schools では、結合についてさらに詳しく説明しています: http://www.w3schools.com/sql/sql_join.asp

于 2012-04-09T20:38:45.093 に答える
0

何かのようなもの:

SELECT o.orderID, p.partname, od.quality
FROM orders o
INNER JOIN orderdetails od ON o.orderID = od.orderID
INNER JOIN parts p ON od.partID = p.partID

個人的には、注文の詳細にパーツ名と価格を保存して、実際に注文されたものの履歴を記録します。結局のところ、たとえば価格が上昇した場合、過去の注文を変更したくないでしょう。

于 2012-04-09T20:44:58.330 に答える