繁体   English   中英

如何在 SQL 数据库中加入多个表,以便在一个表中获取产品 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 中执行小数据请求,但时不时地面临一个问题,即我需要在哪里加入表格,这让我无法理解。 我决定通过尝试完成一项任务来扩展我在该领域的知识,但我完全被难住了。

我是从 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.CustomerID加入Orders.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行,尽管根据订单表我清楚地知道总共只有 196 个订单。

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

更新:我想要的 output 是看到 196 行(订单数),包含以下列:

产品 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 会有所帮助。 如果你还没有,就画一个。 选择一个看起来是获取您需要的所有信息的好地方的起始表。 联接遵循图中的关系。

我将首先使用订单 ID 加入订单以订购详细信息。 然后使用产品 ID 将订单详细信息加入产品。 然后通过客户 ID 将订单加入客户。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM