说我有桌子
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的Part Name,我将如何进行此操作?我会使用两个DataTable吗?我很困惑,因为我看不到有效的方法来做到这一点。我唯一能想到的是用SQL创建一个DataTable:
SELECT * FROM OrderDetails WHERE OrderID=OrderID;
然后可能使用For循环来获取每个PartID,创建另一个DataTable以找到它的PartName,然后将其赋予变量。最多可以搜索10个PartID,我不希望有PartID1 PartID2等变量。
我希望我能够有效地传达我的问题。
由于
编辑:
SQLCmd = "SELECT tblParts.PartID, tblParts.PartName, tblOrderDetails.Quantity, OrderDetails.OrderID FROM tblOrderDetails, tblParts "
SQLCmd = SQLCmd & "WHERE tblParts.PartID = OrderDetails.PartID AND OrderID=" & OrderID & ";"
答案 0 :(得分:1)
我认为您正在寻找join
。语法略微取决于您使用的SQL类型,但通常看起来像这样:
SELECT `Part Name`
FROM Parts p
INNER JOIN OrderDetails o ON p.PartID = o.PartID
WHERE o.OrderDetailsID = ...;
据我了解,这将创建一个临时表,其中包含两个表的字段组合。理论上,它将在组合表中为两个原始表中的每个可能记录组合创建一个记录。要将此值减少到合理的数字,您需要引入关系p.PartID = o.PartID
,这会将其简化为只有大约相同PartID
的组合。
内部联接意味着它只会从具有关联部件ID的订单中选择,并且只选择订单中的部件。 LEFT
和RIGHT
加入可以做对立 - 即使它们不在订单(左)或所有订单中,即使它们没有任何部分(右),也要选择所有部分。
W3Schools还有更多关于加入的内容:http://www.w3schools.com/sql/sql_join.asp
答案 1 :(得分: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
就个人而言,我会在订单详细信息中存储部件名称和价格,以便对实际订购的内容进行历史记录。毕竟,如果价格上涨,您不希望历史订单发生变化。