左连接或内连接
Posted
技术标签:
【中文标题】左连接或内连接【英文标题】:Left join or inner join 【发布时间】:2019-07-12 02:15:15 【问题描述】:我有一个表,Table_employee
有员工 ID、薪水、经理(每个员工各自经理的 ID)和另一个表
Table_manager
包含每个经理的名字、姓氏和每个经理的 ID。
我试图创建另一个表格,显示经理的名字、姓氏和每位经理负责的员工人数以及这些员工的总薪水。
我无法显示经理的名字和姓氏。
我的代码如下。任何帮助将不胜感激。
非常感谢!
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
【问题讨论】:
【参考方案1】:使用LEFT JOIN
和聚合。如果您正在学习 SQL,请忘记RIGHT JOIN
。几乎从不需要它。并且LEFT JOIN
更容易理解(“将所有内容保留在 first 表中”与“将所有内容保留在 last 表中,无论它可能是什么”)。
所以:
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;
【讨论】:
【参考方案2】:我认为您只需要将名字和姓氏添加到分组依据?我错过了一些复杂性吗?
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
但是,交换顺序让经理在左边,员工在右边更有意义,这样您就不会错过没有员工的经理:
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
【讨论】:
以上是关于左连接或内连接的主要内容,如果未能解决你的问题,请参考以下文章