簡體   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