佳礼资讯网

 找回密码
 注册

ADVERTISEMENT

查看: 1284|回复: 6

3 个 table join 需要show 一个table全部record,其他两个table有record的就show

[复制链接]
发表于 25-7-2013 03:31 PM | 显示全部楼层 |阅读模式
这里有三个table,employee,quota,leave,我需要全部employee的record,然后join quota table,要知道他的quota多少,然后leave table里面的record有拿leave的才有record,没有拿leave的就一条record都没有的,但是我希望出来的result是全部employee的名字然后show quota,和他全部拿过的sick leave,和total 起来拿了多少天的sick leave。
  1. employee
  2. ----------------
  3. emp ID|name
  4. ----------------
  5. 1     |emp 1
  6. 2     |emp 2
  7. 3     |emp 3
  8. 4     |emp 4
  9. ----------------

  10. quota
  11. -----------------------
  12. emp ID|leave type|quota
  13. -----------------------
  14. 1     |annual    |5
  15. 1     |sick      |14
  16. 2     |annual    |4
  17. 2     |sick      |14
  18. 3     |annual    |3
  19. 3     |sick      |14
  20. 4     |annual    |2
  21. 4     |sick      |14
  22. ----------------------

  23. leave
  24. ---------------------------------
  25. emp ID|leave type  |date     |day
  26. ---------------------------------
  27. 1     |annual      |22-5-2013|0.5
  28. 2     |sick        |22-5-2013|1.0
  29. 1     |sick        |24-5-2013|1.0
  30. 1     |sick        |25-5-2013|1.0
  31. ---------------------------------

  32. My expected result:
  33. --------------------------------------------
  34. emp ID|name |leave type|quota|date     |day
  35. --------------------------------------------
  36. 1     |emp 1|sick      |14   |24-5-2013|2.0
  37. 2     |emp 2|sick      |14   |22-5-2013|1.0
  38. 3     |emp 3|sick      |14   |null     |null
  39. 4     |emp 4|sick      |14   |null     |null
  40. --------------------------------------------
复制代码
请各位大大帮帮忙,已经不知道怎么写了。
本帖最后由 星之梦 于 25-7-2013 03:35 PM 编辑

回复

使用道具 举报


ADVERTISEMENT

发表于 26-7-2013 10:08 PM | 显示全部楼层
沙发 LEFT OUTER JOIN 可以帮到你
回复

使用道具 举报

发表于 27-7-2013 07:35 PM | 显示全部楼层
应该类似酱

  1. select t0.empId, t0.empName, t1.leaveType, t1.quota, sum(t2.day) as day
  2. from employee t0
  3. left join quota t1 on t0.empId = t1.empId
  4. left join leave t2 on t0.empId = t2.empId and t1.leaveType = t2.leaveType
  5. group by t0.empId, t0.empName, t1.leaveType, t1.quota
复制代码
回复

使用道具 举报

发表于 28-7-2013 12:12 AM | 显示全部楼层
楼上的基本正确,我只是补充。
  1. select e.employee_id, e.employee_name, q.leave_type, q.quota, sum(l.day) as day from tbl_employee e left join tbl_quota q on e.employee_id = q.employee_id left join tbl_leave l on e.employee_id = l.employee_id and q.leave_type = l.leave_type where q.leave_type = 'sick' group by e.employee_id, q.leave_type
复制代码
回复

使用道具 举报

发表于 28-7-2013 01:22 AM | 显示全部楼层
hui_wooi 发表于 28-7-2013 12:12 AM
楼上的基本正确,我只是补充。

没注意到只是要 sick 而已。。。 failed 了
回复

使用道具 举报

发表于 19-8-2013 03:33 PM | 显示全部楼层
只是要(+), oracle
回复

使用道具 举报

Follow Us
 楼主| 发表于 29-8-2013 10:43 AM | 显示全部楼层
嗯,谢谢各位大大,已经有sql code成功了。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

 

ADVERTISEMENT



ADVERTISEMENT



ADVERTISEMENT

ADVERTISEMENT


版权所有 © 1996-2023 Cari Internet Sdn Bhd (483575-W)|IPSERVERONE 提供云主机|广告刊登|关于我们|私隐权|免控|投诉|联络|脸书|佳礼资讯网

GMT+8, 11-6-2024 05:14 PM , Processed in 0.062600 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表