首页 > 解决方案 > 列出所有具有休假职称的员工,并在加入中申请休假

问题描述

我有三张桌子:

表一:员工

emp_id -KEY    emp_name    emp_join_date
 1841           test       2016-04-01
 1842           test1      2019-04-01

表 2:leave_set

emp_id-KEY    start_date    end_date    nod    leave_type_id
 1841         2019-04-01    2019-04-02   2         2

表 3:leave_type

leave_type_id-KEY    leave_title
    1                   AL
    2                   SL
    3                   CME

我尝试了左连接,但如果leave_set没有值,则它在Leave_Setand中返回空值leave_type

   SELECT 
       O.emp_id,  
       P.leave_title, I.leave_type_id, I.nod
   FROM 
       employee O 
   LEFT JOIN 
       leave_set I ON O.emp_id = I.emp_id and o.emp_id=1841
   LEFT OUTER JOIN 
       leave_type P ON P.leave_type_id = I.leave_type_id 

我的输出如下所示:

emp_id  leave_title   nod
1841    NULL          NULL
1879    NULL          NULL

我需要如下输出:

emp_id   Leave_title  nod
1841     AL           -
1841     SL           2
1841     CME          -
1842     AL           -
1842     SL           -
1842     CME          -

我需要每个员工都leave_title知道nod他们是否申请leave_set

标签: sqlsql-serverjoininner-joinouter-join

解决方案


我认为你想要一个cross joinwithleave_type因为你想要所有的组合。后面是left join实际的休假记录,例如

select O.emp_id, P.leave_title, I.leave_type_id, I.nod
from employee O 
cross join leave_type P 
left join leave_set I ON O.emp_id = I.emp_id and I.leave_type_id = P.leave_type_id
where o.emp_id = 1841

PS:您通常会在where条款中限制有问题的员工,而不是join.


推荐阅读