简体   繁体   English

左联接或内联接

[英]Left join or inner join

I have a table, Table_employee has employee ID, salary, manager(the ID of each employee's respective manager), and another table Table_manager which has each manager's first name, last name, and each manager's ID. 我有一个表, Table_employee有员工ID,薪水,经理(每个员工各自经理的ID),还有另一个表Table_manager ,其中有每个经理的名字,姓氏和每个经理的ID。

I was trying to create another table presenting manager's first name, last name, and count of employees each manager is responsible for and the total salary of those employees. 我试图创建另一个表,该表显示经理的名字,姓氏以及每个经理负责的员工人数以及这些员工的总薪水。

I am having trouble to have manager's first name and last name present. 我无法提供经理的名字和姓氏。

My code is as below. 我的代码如下。 Any helps would be highly appreciated. 任何帮助将不胜感激。

Thank you very much! 非常感谢你!

select 
   e.manager, 
   COUNT(e.employee_id), 
   SUM(e.salary) 
FROM 
   Table_employee e 
   Right outer join Table_manager m ON e.manager=m.employee_id 
GROUP BY 
   manager 
ORDER BY 
   manager

Use a LEFT JOIN and aggregation. 使用LEFT JOIN和聚合。 If you are learning SQL, just forget RIGHT JOIN . 如果您正在学习SQL,请忘记RIGHT JOIN It is almost never needed. 几乎不需要它。 And LEFT JOIN is easier to follow ("keep everything in the first table" versus "keep everything in the last table, whatever that might be"). 而且, LEFT JOIN更易于遵循(“将所有内容保留在第一个表中”和“将所有内容保留在最后一个表中”)。

So: 所以:

select m.employee_id, m.firstname, m.lastname, 
       count(e.employee_id), sum(e.salary)
from Table_manager m left join
     Table_employee e
     ON e.manager = m.employee_id
group by m.employee_id, m.firstname, m.lastname
order by m.employee_id;

You just need to add firstname and lastname to group by I think? 您只需要在组中添加名字和姓氏即可? Am I missing some complexity? 我是否缺少一些复杂性?

select e.manager, m.firstname, m.lastname, COUNT(e.employee_id), SUM(e.salary)
FROM Table_employee e
Right outer join Table_manager m ON e.manager=m.employee_id\
GROUP BY manager, m.firstname, m.lastname
ORDER BY manager

However, swapping order so that manager is on left and employee on right makes more sense, so that you don't miss managers without employees: 但是,交换订单以使经理在左边,员工在右边是更有意义的,这样您就不会错过没有员工的经理:

select e.manager, m.firstname, m.lastname, COUNT(e.employee_id), SUM(e.salary)
FROM Table_manager m
Right outer join Table_employee e ON e.manager=m.employee_id
GROUP BY manager, m.firstname, m.lastname
ORDER BY manager

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM