dpdkqls6399 2015-06-09 07:17
浏览 161
已采纳

mysql左边连接三个表

Assuming I have 3 tables:

leave_type:

id   |    name
1    |    maternity leave
2    |    Medical leave
3    |    Casual Leave
4    |    Sick Leave
5    |    honeymoon Leave

employee

id       |       name
4        |       Employee 1
7        |       Employee 2

employee_leave_blance

id   |   employee_id   |   year   |  leave_type_id  | val   
1    |   4             |  2015    |    1            |  9    
2    |   4             |  2015    |    2            |  5   
3    |   7             |  2015    |    1            |  10   
4    |   4             |  2015    |    3            |  4

Here, employee_leave_blance.leave_type_id = leave_type.id

Now I want to get all Leave Type values for all employee.

Let me give an example: I want to get output for employee_id = 4, 7

employee_id  |    name              |  val
4            |    maternity leave   |  9
4            |    Medical leave     |  5
4            |    Casual Leave      |  4
4            |    Sick Leave        |  0
4            |    honeymoon Leave   |  0
7            |    maternity leave   |  10
7            |    Medical leave     |  0
7            |    Casual Leave      |  0
7            |    Sick Leave        |  0
7            |    honeymoon Leave   |  0

My query

SELECT
    lt.name, ifnull(el.val,0) as val , el.employee_id 
FROM leave_type AS lt
    LEFT JOIN employee_leave_balance AS el ON el.leave_type_id = lt.id
AND
    el.year = YEAR(CURDATE()) GROUP BY el.employee_id
  • 写回答

3条回答 默认 最新

  • duanrao3371 2015-06-09 07:33
    关注

    You can do it this way:

    SELECT employee_id,leave_name,IFNULL(val,0) as val
    FROM
    
    (SELECT e.id as employee_id,l.id as lid,l.name as leave_name
     FROM employee e CROSS JOIN leave_type l) as T1 LEFT JOIN
    
    (SELECT val,employee_id as eid,leave_type_id as lid
     FROM employee_leave_blance elb) as T2 ON T1.employee_id=T2.eid AND T1.lid=T2.lid
    
    ORDER BY employee_id asc,val desc
    

    Result:

    employee_id leave_name       val
    --------------------------------
    4           maternity leave  9
    4           Medical leave    5
    4           Casual Leave     4
    4           Sick Leave       0
    4           honeymoon Leave  0
    7           maternity leave  10
    7           Casual Leave     0
    7           honeymoon Leave  0
    7           Sick Leave       0
    7           Medical leave    0
    

    Sample result in SQL Fiddle.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 phython读取excel表格报错 ^7个 SyntaxError: invalid syntax 语句报错
  • ¥20 @microsoft/fetch-event-source 流式响应问题
  • ¥15 ogg dd trandata 报错
  • ¥15 高缺失率数据如何选择填充方式
  • ¥50 potsgresql15备份问题
  • ¥15 Mac系统vs code使用phpstudy如何配置debug来调试php
  • ¥15 目前主流的音乐软件,像网易云音乐,QQ音乐他们的前端和后台部分是用的什么技术实现的?求解!
  • ¥60 pb数据库修改与连接
  • ¥15 spss统计中二分类变量和有序变量的相关性分析可以用kendall相关分析吗?
  • ¥15 拟通过pc下指令到安卓系统,如果追求响应速度,尽可能无延迟,是不是用安卓模拟器会优于实体的安卓手机?如果是,可以快多少毫秒?