使用左连接和内连接在SQL中连接4个表

时间:2015-09-23 07:25:40

标签: mysql sql

嘿我试图在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
; 

2 个答案:

答案 0 :(得分:0)

查询中出现的错误很少,使用[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是一个保留字,因此您需要像上面的查询中所做的那样对其进行反引号

答案 1 :(得分:0)

您可以使用以下简单查询 -

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;