1

我有 3 张桌子

Personel : id, name
Department : id, name
Match_Dept_Per : dept_id, pers_id, workInfo

外键:
dept_id --> Department.id
pers_id --> Personel.id

示例数据:人员


1,Emir Civas
2,Sercan Tuncay

部门:
1、销售
2、企划

Match_Dept_Per :
1,1,经理

我想要做的是,列出人们的姓名、他们的部门名称和 workInfos,例如:

ID | Pers. Name | Dept Name | Work Info
---------------------------------------
1  | Emir Civas | Sales     | Manager

我可以通过一个简单的选择查询来做到这一点:

select p.id, p.name, d.name, m.workInfo
  from personel p, department d, match_dept_per m
 where p.id = m.pers_id and d.id = m.dept_id;

这是我的架构和此查询的示例小提琴

但是,我需要显示其他人的 ID 未插入到 match_dept_per 表中。并将“未知”设置为空值。喜欢:

ID | Pers. Name    | Dept Name | Work Info
------------------------------------------
1  | Emir Civas    | Sales     | Manager
2  | Sercan Tuncay | Unknown   | Unknown

由于我使用的是 Match_Dept_Per 表,如果没有添加 Personel ID,我将无能为力。

有什么建议么 ?

4

1 回答 1

4

用于left outer join包括所有人员,即使他们与其他表没有关联:

select p.id,
       p.name,
       ifnull(d.name, 'Unknown') DepName,
       ifnull(m.workInfo, 'Unknown') workInfo
  from personel p
       left outer join match_dept_per m
           on p.id = m.pers_id
       left outer join department d
           on d.id = m.dept_id

这是一个演示小提琴

由于您似乎使用 MS SQL,您可能需要使用isnull()而不是ifnull(). 但无论如何我都会忽略这一点,因为我认为最好NULL在代码中使用数据(Java、C# 等)。您可以在那里控制输出。

于 2013-04-18T01:55:04.660 回答