【发布时间】:2019-03-27 10:18:03
【问题描述】:
我有一张表,其中列有 employeeNumber 和 reportsTo,正如您从屏幕截图中看到的那样。每个名字都向另一个名字报告。喜欢employeeNumber 1165 reportsTo 1143。
如何在结果中显示员工的每个firstName 和lastName 以及他的“老板”的firstName 和lastName?
希望你能理解我。
【问题讨论】:
我有一张表,其中列有 employeeNumber 和 reportsTo,正如您从屏幕截图中看到的那样。每个名字都向另一个名字报告。喜欢employeeNumber 1165 reportsTo 1143。
如何在结果中显示员工的每个firstName 和lastName 以及他的“老板”的firstName 和lastName?
希望你能理解我。
【问题讨论】:
你可以试试这个:
SELECT e.firstName, e.lastName, b.firstName, b.lastName
FROM employees as e
LEFT JOIN employees as b on b.employeeNumber = e.reportsTo;
b.employeeNumber = e.reportsTo 上进行了联接,因此您将从员工报告的员工编号获取老板信息(例如,员工 1056 向员工 1002 报告,因此员工数据是帕特森玛丽,他向员工墨菲黛安报告,她的老板) 编辑:
阅读 Hamza Haider 关于 SELF JOIN 的回答(我之前在同一张表上加入的名称)后,我发现另一个问题的答案看起来像你想要的,它会给你一些信息来理解 @ 987654326@ 作品:What is SELF JOIN and when would you use it?
根据答案,这里是另一种解决方案:
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,但它们都相同(Are left outer joins and left joins the same?)
【讨论】:
试试这个。它只会返回那些有 reportsTo 值(不是空值)的。
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;
【讨论】:
你需要使用self join。Self Join
select * from Employees AS Employees1 join Employees as Employees2 ON Employees1.employeeNumber = Employees2.reportsTo
【讨论】: