我对 SQL 编码并不陌生,我只是通常习惯于在 PHP 中从数据库中执行小数据请求,但时不时会遇到需要在哪里连接表的问题,这让我难以理解。我决定通过尝试完成一项任务来扩展我在该领域的知识,但我完全被难住了。
我是从 W3Schools 网站上学习的,所以我所有的参考资料都来自他们位于此处的 TryItEditor 中的数据库:
https://www.w3schools.com/sql/trysql.asp?filename=trysql_select_all
我正在尝试使用 SQL 来显示CustomerName以及他们放置的OrderID以及ProductName和ProductID。
我试图这样做的方式——我知道这可能是错误的,但我对此并不陌生——是使用LEFT JOIN或INNER JOIN来首先加入两列Products.ProductID和OrderDetails.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行,尽管根据Orders表我清楚地知道总共只有 196 个订单。
我已经尝试通过我在网上找到的各种教程来了解如何做到这一点,但我没有得到我想要的结果。如果有人能指出我正在尝试做的正确方向,将不胜感激!谢谢!
更新: 我想要的输出是查看 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
我能够获得所需的视图,但仍然有太多行。