我需要能够显示员工姓名及其当前和以前的工作。
我尝试了这个,但我没有得到正确的结果:
SELECT
HR.E.FIRST_NAME,
HR.E.LAST_NAME,
HR.J.JOB_ID,
HR.JH.JOB_ID OLD_JOB_ID
FROM
HR.JOBS J
LEFT JOIN HR.EMPLOYEES E ON E.JOB_ID = J.JOB_ID
LEFT JOIN HR.JOB_HISTORY JH ON JH.JOB_ID = J.JOB_ID
我明白了:
First Name | Last Name | JOB ID | OLD JOB ID |
John | Smith | Admin | (null) |
答案 0 :(得分:1)
如果您直接加入EMPLOYEES
和JOBS
,您只能获得每位员工的当前工作。使用EMPLOYEES
加入JOB_HISTORY
,您就可以获得每位员工所拥有的每份工作,并将结果与JOBS
一起获取每个职位历史记录条目的相应职位:
SELECT
HR.E.FIRST_NAME,
HR.E.LAST_NAME,
HR.J.JOB_TITLE,
HR.JH.JOB_ID
FROM
HR.EMPLOYEES E
LEFT JOIN HR.JOB_HISTORY JH ON JH.EMPLOYEE_ID = E.EMPLOYEE_ID
LEFT JOIN HR.JOBS J ON J.JOB_ID = JH.JOB_ID
答案 1 :(得分:0)
我想你应该从EMPLOYEES
JOB_HISTORY
和JOIN
表开始,将它们放在一起。然后jobs
结果为select *
from jobs j
join (select * from EMPLOYEES
UNION ALL
select * from JOB_HISTORY) as all_emp
ON all_emp.JOB_ID = j.JOB_ID
表:
Mapper.CreateMap<Customer, CustomerDto>();
(我宁愿只有一张表适用于当前和过去的所有工作。)