2012-09-26 13 views
2

選擇這裏的工作人員的名字是要求基本的SQL語句,從工作人員的表

我有兩個表如下圖所示,OrderList是一個數據表,其中包括存儲,STAFFID 3場是從員工表的外鍵。注意到一些記錄在這張表中可能沒有值。

OrderList

OrderId Marketing_Staff_ID Finance_Staff_Id ManagerId 
1  STAFF001   STAFF002   STAFF003 
2       STAFF005   STAFF003 
3  STAFF004   STAFF004   STAFF003 
4  STAFF001   STAFF002   STAFF003 
5  STAFF001       STAFF007 

員工

Staff_Id Staff_Name 
STAFF001 Jack C.K. 
STAFF002 William. C 
STAFF005 Someone 

我想寫一個SQL語句也可以選擇人員名稱爲每個記錄形式OrderList,(對於這些記錄,沒有工作人員ID,在名稱字段中留下N/A)

OrderId Mkt StaffID Name  Finance StaffId Name  ManagerId, Name 
1  STAFF001 Jack C.K. STAFF002   William. STAFF003 Chan.Chi 

那麼我該如何編寫SQL?左連接或某事?

非常感謝你,因爲我真的是SQL的初學者。

回答

5

您需要多個LEFT JOIN S:

select ol.orderid, 
     ol.marketing_staff_id, 
     coalesce(ms.staff_name, 'n/a') as marketing_name, 
     ol.finance_staff_id, 
     coalesce(fi.staff_name, 'n/a') as finance_name 
from orderlist as ol 
    left join staff as ms on ms.staff_id = ol.marketing_staff_id 
    left join staff as fi on fi.staff_id = ol.finance_staff_id 

我會離開它給你添加的加入爲經理。

上面是ANSI SQL,應該在每個DBMS中工作。有一點可能性,即你的DBMS不支持​​3210函數,它只是用一些不同的東西來代替NULL值。在這種情況下,你需要檢查你的DBMS的手冊。