假设我有 2 个表:
休假类型
id name
1 maternity leave
2 Medical leave
3 Casual Leave
4 Sick Leave
5 honeymoon Leave
employee_leave_blance
id employee_id year leave_type_id val
1 4 2015 1 9
2 4 2015 2 5
3 8 2015 1 10
4 4 2015 3 4
此处 employee_leave_blance.leave_type_id = leave_type.id
现在我想获取 employee_id=4
的所有 Leave Type 值
在 employee_leave_blance
表中,employee_id=4
只有 3 个 leave_type 条目,但在 leave_type
表中有 5 个。
我想为一名员工获得 5 个条目。如果在 employee_leave_blance
中没有找到条目,它应该返回 0。
让我举个例子:我想得到 employee_id = 4
employee_id name val
4 maternity leave 9
4 Medical leave 5
4 Casual Leave 4
4 Sick Leave 0
4 honeymoon Leave 0
为此,我尝试了以下查询:
select
el.employee_id, lt.name, el.val from leave_type as lt
left join employee_leave_blance as el on el.leave_type_id = lt.id
where
el.year = YEAR(CURDATE()) and el.employee_id = 4
然而,它返回以下结果:
employee_id name val
4 maternity leave 9
4 Medical leave 5
4 Casual Leave 4
现在如何获取员工所有 leave_type 的值?
最佳答案
不确定这是否是您需要的,请尝试:
select ifnull(el.employee_id,4) as employee_id,
lt.name,ifnull(el.val,0) as val
from leave_type as lt
left join (select year,employee_id,val,leave_type_id
from employee_leave_balance) as el
on el.leave_type_id = lt.id
and el.year = year(curdate())
and el.employee_id = 4
实际上,您的查询可以进行一些修改。只需删除 and
的 where
子句,因为您已经加入表并使用 ifnull
函数为 null 值返回 0。这是您的查询,但有所改进:
select
ifnull(el.employee_id,4) as employee_id, lt.name, ifnull(el.val,0) as val
from leave_type as lt
left join employee_leave_balance as el on el.leave_type_id = lt.id
and
el.year = YEAR(CURDATE()) and el.employee_id = 4
关于php - mysql左连接两个表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30689828/