如何在 SQL 数据库中加入多个 Table 以便在一个 Table 中获取产品 ID、订单 ID 和客户信息?

How to JOIN Multiple Tables in an SQL Database in Order to Get Product IDs, OrderIDs, and the Customer info all in One Table?

我不是 SQL 编码的新手,我通常只是习惯于从数据库中 PHP 中执行小数据请求,但时不时地遇到一个问题我需要加入 tables,这超出了我的理解范围。我决定通过尝试完成一项任务来开始扩展我在该领域的知识,但我完全被难住了。

我是从 W3Schools 网站上学习的,所以我所有的参考都来自位于此处的 TryItEditor 中的数据库:

https://www.w3schools.com/sql/trysql.asp?filename=trysql_select_all

我正在尝试使用 SQL 来显示 CustomerName 和他们放置的 OrderID,以及ProductNameProductID

我尝试这样做的方式——我知道这可能是错误的,但我是新手——是使用 LEFT JOININNER JOIN 首先加入两列 Products.ProductIDOrderDetails.ProductID。然后我也试图加入 OrderDetails.ProductID。最后,尝试加入 Customers.CustomerIDOrders.CustomerID.

这是我的代码:

SELECT Products.ProductID, OrderDetails.ProductID, Products.ProductName, Customers.CustomerName, Products.ProductName, Orders.OrderID FROM OrderDetails LEFT JOIN Products ON OrderDetails.ProductID = Products.ProductID LEFT JOIN Orders ON OrderDetails.ProductID = Products.ProductID LEFT JOIN Customers ON Customers.CustomerID = Orders.CustomerID;

然而,当我 运行 这段代码时,它显示 101528 行,虽然我根据 Orders table 清楚地知道那里总共才196个订单

我已经尝试通过我在网上找到的各种教程来了解如何执行此操作,但我没有得到我想要的结果。如果有人能指出我正在尝试做的正确方向,将不胜感激!谢谢!

更新: 我想要的输出是看到 196 行(订单数)和以下列:

Product ID -- ProductName -- CustomerName -- OrderID --

更新内森的回答:

SELECT Customers.CustomerID, Orders.OrderID, Products.ProductID, Products.ProductName, Customers.CustomerName FROM Orders INNER JOIN OrderDetails ON OrderDetails.OrderID = Orders.OrderID INNER JOIN Products ON OrderDetails.ProductID = Products.ProductID INNER JOIN Customers ON Customers.CustomerID = Orders.CustomerID

我能够获得所需的视图,但行数仍然太多。

从内部联接开始。左连接意味着即使右边的行不存在,你也会显示左边的行。可以进行内部联接后进行左联接的时间到了。

拥有 ERD 很有帮助。如果您还没有,请画一张。选择一个看起来不错的起点 table 来获取您需要的所有信息。联接遵循图中的关系。

我会首先使用订单 ID 将订单加入到订单详细信息中。 然后使用产品 ID 将订单详细信息加入产品。 然后通过customer Id join order to customer.

一次添加一个联接并确认结果有意义。请注意,如果您通过订单 ID 将订单连接到订单详细信息,您将返回的行数等于详细信息的数量,而不是订单的数量。