sql - 基本SQL语句,从人员表中选择人员姓名

标签 sql

这是要求

我有两个如下所示的表,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/

相关文章:

sql - 如何将数据过滤到新列中? sql

sql - 如何在 sql server 邮件中包含登录信息?

sql - 与联合所有SQL查询获取错误 'Column specified multiple times'

mysql - 为多个查询获取 rails ActiveRecord 而不是对象数组

c# - 从具有重复数据的 SQL 结果创建键值对

c# - SQL C# 交互不起作用

php - 如何找到所需的唯一结果

mysql - 我如何选择数据库中有两个特定玩家的所有比赛?

SQL Server : How to find unused fields in view

c# - “逆向工程”模型优先 - 删除表和列前缀