【问题标题】:Joining 3 Tables on mySQL在 mySQL 上连接 3 个表
【发布时间】:2017-10-22 15:21:03
【问题描述】:

美好的一天。

我知道这个问题已经被问过了,但我很难解决我的问题。

我想加入 3 张桌子。这是我的表格的样子:

Order_Header(Order_Header_ID{PK}, Order_Date, Order_Time, Order_Complete)
Order_Line(Order_Line_ID{PK}, Product_ID{FK}, Order_Header_ID{FK},Quantity)
Products(Product_ID{PK}, Description, Cost)

我想加入三个表,以便在一个表中显示三个表中的 Order_Header_ID、数量和描述,其中 Order_Complete = 'YES'。 我有以下 SQL 显示所有信息但不加入它们。

SELECT
    Order_Header.Order_Header_ID,
    Products.Description,
    Order_Line.Quantity
FROM Order_Header, Products, Order_Line
WHERE Order_Complete = 'yes'

这个想法是它只列出一次 Order_Header_ID 以及相应的描述和数量。

提前谢谢你

【问题讨论】:

  • " 我有以下 SQL 显示所有信息但不加入它们。" FROM Order_Header, Products, Order_Line WHERE Order_Complete = 'yes' 实际上你在这里使用的是旧的隐式 CROSS JOIN 语法
  • 从不FROM 子句中使用逗号。 始终使用正确、明确的JOIN 语法。
  • @GordonLinoff “永远不要在FROM 子句中使用逗号”听起来太强烈了。通过将它们放在FROM 子句中的内部连接表是有意义的。唯一的问题是WHERE 子句必须包含正确的连接条件。

标签: php mysql sql database join


【解决方案1】:

您当前的查询缺少连接条件。此外,最好使用显式连接语法。纠正这两个问题,我们可以编写以下查询:

SELECT
    oh.Order_Header_ID,
    p.Description,
    ol.Quantity
FROM Order_Header oh
INNER JOIN Order_Line ol
    ON oh.Order_Header_ID = ol.Order_Header_ID
INNER JOIN Products p
    ON ol.Product_ID = p.Product_ID
WHERE
    oh.Order_Complete = 'yes'

【讨论】:

    猜你喜欢
    • 2019-03-28
    • 2013-04-21
    • 2023-03-03
    • 1970-01-01
    • 2016-08-31
    • 1970-01-01
    • 1970-01-01
    • 2013-06-30
    • 1970-01-01
    相关资源
    最近更新 更多