基本SQL语句,从staff表中选择人员名称

Fra*_*ank 2 sql

这是要求

我有两个表如下,OrderList是一个数据表,其中包含3个字段存储StaffId,这是一个来自staff表的外键.注意到某些记录在此表中可能没有值.

订单

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
Run Code Online (Sandbox Code Playgroud)

员工

Staff_Id Staff_Name
STAFF001 Jack C.K.
STAFF002 William. C
STAFF005 Someone
Run Code Online (Sandbox Code Playgroud)

我想写一个SQL语句也可以为每个记录表单OrderList选择人员名称,(对于没有员工ID的这些记录,在名称字段中保留N/A)

OrderId Mkt StaffID Name       Finance StaffId  Name      ManagerId, Name
1       STAFF001    Jack C.K.  STAFF002         William.  STAFF003   Chan.Chi
Run Code Online (Sandbox Code Playgroud)

那我怎么写SQL呢?左加入还是......

非常感谢,因为我真的是SQL的初学者.

a_h*_*ame 5

你需要多个LEFT JOINs:

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
Run Code Online (Sandbox Code Playgroud)

我会留给你为经理添加联接.

以上是ANSI SQL,应该适用于每个DBMS.您的DBMS可能不支持coalesce仅使用NULL不同的值替换值的函数.在这种情况下,您需要检查DBMS的手册.