简体   繁体   English

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

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

Hey I am trying to join 4 tables in sql, with an left join and an inner join. 嘿,我试图用左联接和内联接联接sql中的4个表。

Hospital table 医院桌

HospitalID| Name| Province| Email| 

Order table 订单表

OrderID| HospitalID| StaffID| DeliverID| Date| Time

Item table 项目表

ItemID| Type| Name| Quantity| Expiry_Date

OrderItem table OrderItem表

OrderItemID| OrderID| ItemID| Quantity

I attempted executing the following SQL query but I am getting error message and I don't know what I'm doing wrong. 我尝试执行以下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
; 

There are few mistakes in the query, the syntax using [Order] is invalid in mysql, and then you need an alias for the inner query. 查询中几乎没有错误,使用[Order]的语法在mysql中无效,然后您需要为内部查询使用别名。 Also OrderItem needs to be joined first with Order. 另外,OrderItem需要首先与Order联接。 Further more no need to use use subquery for join since you are not doing any aggregate part to get the data from Item . 另外,由于您没有做任何合计的工作来从Item获取数据,因此无需使用use子查询进行Item In mysql the query will look like below. 在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 ; 

Note that Order is a reserved word so you need to backtick it as done in the query above 请注意, Order是保留字,因此您需要像上面的查询中一样对它进行反打

you can use below simple query- 您可以在下面的简单查询中使用-

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; 

If there is chance that you want to show all hospital name even without its details in other tables like type, quantity etc. then you can use of left join- 如果您有机会即使在其他表格(例如类型,数量等)中都没有详细信息的情况下也要显示所有医院名称,则可以使用左连接-

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