【问题标题】:Query returns false information on column查询返回关于列的错误信息
【发布时间】:2020-06-05 13:23:28
【问题描述】:

如果你运行这个:

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

您会得到结果,其中每个订单 ID 都有一组包含产品名称和供应商名称的行。 现在,有趣的是,对于每个订单作为一个整体(比如订单 10300 的一组两行) 总是有相同的供应商名称。

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

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

【问题讨论】:

    标签: mysql sql database join


    【解决方案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
    

    【讨论】:

    • 哇,非常感谢!我不知道JOINS的顺序/排列会产生这样的影响!你真的帮了我,从没想到这会导致问题xD
    • 不是导致您的问题的连接顺序,而是连接的标准。当您想要“s.supplierid = p.supplierid”时,您有“o.shipperid = s.supplierid”导致问题。如果您有第一张或第四张桌子,那没有区别。
    猜你喜欢
    • 2021-10-25
    • 1970-01-01
    • 2019-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-17
    相关资源
    最近更新 更多