这是要求
我有两个如下所示的表,OrderList是一个数据表,其中包含3个存储StaffId的字段,StaffId是来自员工表的外键。请注意,某些记录在此表中可能没有值。
订单列表
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 初学者。
最佳答案
您需要多个LEFT JOIN
:
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 有可能不支持 coalesce 函数,该函数只是用不同的值替换 NULL 值。在这种情况下,您需要检查 DBMS 的手册。
关于sql - 基本SQL语句,从人员表中选择人员姓名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12596139/