php中左联接两张表怎么做,php – mysql左连接两个表

假设我有2个表:

leave_type

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值

在Employ_id = 4的employee_leave_blance表中,只有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

实际上,您的查询将适用于一些修改.只需删除where子句,因为你已经连接了表并使用ifnull函数为空值返回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

来源: https://codeday.me/bug/20190708/1400342.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值