SELECT
e.firstName,
e.lastName,
r.firstName AS bossFirstName,
r.lastName AS bossLastName
FROM employees AS e
INNER JOIN employees AS r ON e.employeeNumber = r.reportsTo;
如果要查看每个员工,即使它没有reportsto值,也可以使用left join:
SELECT
e.firstName,
e.lastName,
r.firstName AS bossFirstName,
r.lastName AS bossLastName
FROM employees AS e
LEFT JOIN employees AS r ON e.employeeNumber = r.reportsTo;
SELECT
e1.FirstName,
e1.LastName,
e2.FirstName as SupervisorFirstName,
e2.LastName as SupervisorLastName
FROM employee e1
LEFT OUTER JOIN employee e2 on e2.employeeNumber = e1.reportsTo
区别在于 LEFT OUTER JOIN 而不是 LEFT JOIN 但是它们都是相同的(左外连接和左连接是相同的吗?)
3条答案
按热度按时间bgibtngc1#
您需要使用self join.self join
aij0ehis2#
试试这个。它将只返回那些具有reportsto值(非空值)的值。
如果要查看每个员工,即使它没有reportsto值,也可以使用left join:
yruzcnhs3#
你可以试试这个:
您可以选择每个员工的名字和姓氏
你可以选择他们老板的名字和姓氏
使用left join应该为不向任何人报告的boss返回一些null值
我是在
b.employeeNumber = e.reportsTo
因此,您将从雇员向其报告的employeenumber获取老板信息(例如,雇员1056向雇员1002报告,因此雇员数据是patterson mary,他向雇员murphy diane报告,她的老板)编辑:
读完哈姆扎·海德尔关于
SELF JOIN
(我以前在同一个表上使用join所做的工作的名称)我发现了另一个问题,其中的答案看起来像您想要的,它将为您提供一些信息,让您了解如何使用joinSELF JOIN
works:什么是自连接?什么时候使用它?根据答案,这里还有一个解决方案:
区别在于
LEFT OUTER JOIN
而不是LEFT JOIN
但是它们都是相同的(左外连接和左连接是相同的吗?)