如何根据另一个表中的值从一个表中获取值?

时间:2012-04-09 20:29:25

标签: sql database vb.net

说我有桌子

    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 & ";"

2 个答案:

答案 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的订单中选择,并且只选择订单中的部件。 LEFTRIGHT加入可以做对立 - 即使它们不在订单(左)或所有订单中,即使它们没有任何部分(右),也要选择所有部分。

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

就个人而言,我会在订单详细信息中存储部件名称和价格,以便对实际订购的内容进行历史记录。毕竟,如果价格上涨,您不希望历史订单发生变化。