提问者:小点点

查询返回列的错误信息


如果运行以下内容:

SELECT  o.orderid,suppliername,p.productname
FROM Suppliers s
JOIN Orders o
ON o.shipperid = s.supplierid
JOIN OrderDetails od
ON od.orderid = o.orderid
JOIN Products p 
ON p.productid = od.productid

在https://www.w3schools.com/sql/trymysql.asp?filename=trysql_func_mysql_count

得到的结果是,对于每个order-id,都有一组带有productnames和supplierNames的行。 现在,有趣的是,对于每个订单作为一个整体(例如订单10300的两行集合),总是有相同的supplierName。

但这不是真的。 当您查找表“products”时,您会发现例如对于ID为66和68的产品,即订单10300中包含的产品,有两个不同的供应商ID注册。 2和8。 这些解析为supplieres表中的两个不同的SupplierName。

这是为什么? 在我看来,这是一个相当简单的问题,我没想到会遇到任何问题。 但是在这里,表中呈现给我的数据和查询返回的数据明显不同。 是我遗漏了什么,还是他们的站点/数据库坏了?


共1个答案

匿名用户

该错误是由您加入供应商表的方式引起的。 不是将Suppliers表连接到Orders表,而是将Products连接到Suppliers表以获取这些产品的供应商。 这样的查询如下所示:

SELECT  o.orderid, s.suppliername, p.productname
FROM Orders o
    JOIN OrderDetails od ON od.orderid = o.orderid
    JOIN Products p ON p.productid = od.productid
    JOIN Suppliers s ON s.supplierid = p.supplierid