我如何将这3张桌子连在一起?

时间:2016-02-03 11:24:56

标签: sql join

很难把头包裹起来。这是3个表格。 enter image description here

我需要能够显示员工姓名及其当前和以前的工作。

我尝试了这个,但我没有得到正确的结果:

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)     |

2 个答案:

答案 0 :(得分:1)

如果您直接加入EMPLOYEESJOBS,您只能获得每位员工的当前工作。使用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_HISTORYJOIN表开始,将它们放在一起。然后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>();

(我宁愿只有一张表适用于当前和过去的所有工作。)