【问题标题】:Join 4 Tables in SQL with left join and inner join使用左连接和内连接在 SQL 中连接 4 个表
【发布时间】:2015-09-23 07:25:39
【问题描述】:

嘿,我正在尝试在 sql 中加入 4 个表,一个左连接和一个内连接。

医院表

HospitalID| Name| Province| Email| 

订单表

OrderID| HospitalID| StaffID| DeliverID| Date| Time

物品表

ItemID| Type| Name| Quantity| Expiry_Date

OrderItem 表

OrderItemID| OrderID| ItemID| Quantity

我尝试执行以下 SQL 查询,但收到错误消息,我不知道自己做错了什么。

SELECT Hospital.Name, Item.Type, OrderItem.Quantity
FROM Hospital 
LEFT JOIN [Order]   
ON Hospital.HospitalID=[Order].HospitalID
INNER JOIN (SELECT Item.Type 
            FROM Item 
            GROUP BY Item.Type)
OrderItem ON Item.ItemID = OrderItem.ItemID
; 

【问题讨论】:

  • 您的子查询缺少临时名称。

标签: mysql sql


【解决方案1】:

查询很少有错误,使用[Order]的语法在mysql中是无效的,然后你需要一个别名给内部查询。 OrderItem 也需要先与 Order 连接。此外,无需使用子查询进行连接,因为您没有执行任何聚合部分来从Item 获取数据。在 mysql 中,查询将如下所示。

SELECT 
h.Name, 
i.Type, 
oi.Quantity
FROM Hospital h 
LEFT JOIN `Order` o  ON o.HospitalID = h.HospitalID
INNER JOIN OrderItem oi on oi.OrderID = o.OrderID
INNER JOIN Item i 
on i.ItemID = oi.ItemID ; 

请注意,Order 是保留字,因此您需要像上面的查询一样将其反引号

【讨论】:

    【解决方案2】:

    你可以使用下面的简单查询-

    SELECT 
    hosp.Name, 
    itm.Type, 
    oi.Quantity
    FROM Hospital hosp 
    JOIN `Order` ord  ON ord.HospitalID = hosp.HospitalID
    JOIN OrderItem oi on oi.OrderID = ord.OrderID
    JOIN Item itm on itm.ItemID = oi.ItemID; 
    

    如果您有可能想要显示所有医院名称,即使在类型、数量等其他表格中没有其详细信息,那么您可以使用左连接-

    SELECT 
    hosp.Name, 
    itm.Type, 
    oi.Quantity
    FROM Hospital hosp 
    LEFT JOIN `Order` ord  ON ord.HospitalID = hosp.HospitalID
    LEFT JOIN OrderItem oi on oi.OrderID = ord.OrderID
    LEFT JOIN Item itm on itm.ItemID = oi.ItemID; 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-01-30
      • 2016-08-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多