繁体   English   中英

用左联接和内联接联接SQL中的4个表

[英]Join 4 Tables in SQL with left join and inner join

嘿,我试图用左联接和内联接联接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
; 

查询中几乎没有错误,使用[Order]的语法在mysql中无效,然后您需要为内部查询使用别名。 另外,OrderItem需要首先与Order联接。 另外,由于您没有做任何合计的工作来从Item获取数据,因此无需使用use子查询进行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是保留字,因此您需要像上面的查询中一样对它进行反打

您可以在下面的简单查询中使用-

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; 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM