php - mysql左连接两个表

标签 php mysql

假设我有 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

实际上,您的查询可以进行一些修改。只需删除 andwhere 子句,因为您已经加入表并使用 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/

相关文章:

php - mysql 连接和空

php - 当 Wilson 分数间隔相等时,MYSQL 使用 UploadDate 对下一行进行排序

mysql - PDO 使用 bindParam 返回 MySQL 错误

php - 防止 PHP 输出左连接中显示重复记录

mysql - 如何使用自定义开始时间计算一列中一天的时差

php - 如何在sphinxapi中通过sql_attr_uint过滤结果?

php - PHP 中的单例模式....如何在请求之间保存状态

php - 使用 CPP 手动构建 POST 请求并提交 php 表单

php登录错误检查脚本与sql

mysql - 在MySQL中进行特殊排序,3个随机最高分,比所有随机