在SQL Server 2005中连接三个表

5

我迄今为止已经使用了两个表的连接,但现在我想要连接三个表,如下图所示:

alt text
(来源:microsoft.com)

我已经尝试过连接两个表,

SELECT O.OrderID,O.CustID,O.OrderTotal,C.Name from Orders
as O inner join Customers as C on O.CustID=C.CustID 

如何将第三个表与此表连接?有什么建议吗?

个人客户订单详情 - ACP
啊啊...你正在把数据库规范化打到地上 :) (关于Orders中的OrderTotal) - user57508
我无法理解你的评论... - ACP
@dittodhole - 当然,反过来考虑,如果优化读取性能(通常更常见),像这样去规范化可能是有益的(每次都访问OrderItems表以总结总数会浪费时间)。 - AdaTheDev
@AdaTheDev:我认为他更多地在做像所要求的那样的连接。假设这样:您已经进行了连接,您也可以使用SUM()函数。 - user57508
显示剩余4条评论
3个回答

11
你需要做同样的事情,但是针对第三个表格。
SELECT O.OrderID,O.CustID,O.OrderTotal,C.Name, OC.OrderAmount
FROM Orders as O 
INNER JOIN Customers as C 
  ON O.CustID=C.CustID 
INNER JOIN OrderItems as OC
  ON O.OrderID=OC.OrderID 

3
    Select Customers.Name
    From OrderItems                            --      (Table 1)
    INNER JOIN Orders                          --      (Table 2)
    ON OrderItems.OrderID = Orders.OrderID
    INNER JOIN Customers                       --      (Table 3)
    ON Orders.CustID = Customers.CustID
    Where Customers.CustID = 2                 --      This will give you the name of the second customer in the third table using JOINS

3
您可以在末尾添加另一个JOIN:
inner join OrderItems as OI ON O.OrderID= OI.OrderID

请注意,每个订单项中都会返回顶级订单信息(订单ID、客户ID、订单总额和客户名称)。 因此,根据情况,您可能希望先检索顶层数据,然后单独返回所有订单项详细信息,以避免返回大量重复数据。这取决于具体情况,但值得一提。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接