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 的 Part Name,我该怎么做呢?我会使用两个数据表吗?我很困惑,因为我看不到有效的方法来做到这一点。我唯一能想到的就是用 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 & ";"
4

2 回答 2

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 的订单中选择,并且仅从订单中的部件中进行选择。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 回答