我正在尝试编写一个查询,该查询将从我的部门表中提供所有信息,并与employees表联接以获取所有部门的经理的姓名。我可以得到他们,除了一个没有经理的部门,为此我需要打印出来#34;没有经理"。我尝试在WHERE子句中使用nvl和to_char,但我不认为我正在写它。
这是我写的代码:
SELECT d.department_id,d.DEPARTMENT_NAME,d.LOCATION_ID,d.MANAGER_ID,
e.first_name||' '||e.last_name AS Manager
FROM departments d
JOIN employees e ON d.MANAGER_ID = e.employee_ID
WHERE NVL(TO_CHAR(d.MANAGER_ID),'No Manager');
当我在没有WHERE子句的情况下运行它时,除了那个缺少的部门之外,我得到了正确的输出。
答案 0 :(得分:0)
你需要的是一个外部联接。
select d.department_id,
d.department_name,
d.location_id,
coalesce(d.manager_id, 'No Manager'),
coalesce(e.first_name||' '||e.last_name, 'No Manager') as manager
from departments d
left outer join
employees e
on d.manager_id = e.employee_id;
使用内部联接,您将只获得拥有经理的部门。
LEFT OUTER JOIN确保查询返回左侧表格中的所有记录,即部门。