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