The Employee
table holds all employees including their managers. Every employee has an Id, and there is also a column for the manager Id.
+----+-------+--------+-----------+
| Id | Name | Salary | ManagerId |
+----+-------+--------+-----------+
| 1 | Joe | 70000 | 3 |
| 2 | Henry | 80000 | 4 |
| 3 | Sam | 60000 | NULL |
| 4 | Max | 90000 | NULL |
+----+-------+--------+-----------+
Given the Employee
table, write a SQL query that finds out employees who earn more than their managers. For the above table, Joe is the only employee who earns more than his manager.
+----------+
| Employee |
+----------+
| Joe |
+----------+
My Solution:
SELECT
b. NAME AS Employee
FROM
employee a
LEFT JOIN employee b ON a.Id = b.ManagerId
WHERE
a.Salary < b.Salary
思路:
先把Employee
表中有上司的员工的员工工资信息与上司工资信息连接在同一条记录内,再在同一条记录内比较工资高低。 (应使用inner join
)
要注意连接后员工信息Employee
表以及上司信息Employee
表的别名区分。此处a表为上司表,b表为员工表。
Other People’s Solutions:
Select emp.Name from
Employee emp inner join Employee manager
on emp.ManagerId = manager.Id
where emp.Salary > manager.Salary
摘自 —— https://discuss.leetcode.com/topic/8315/sharing-my-solution/2
作者:mahdy
延伸:
SQL中inner join、outer join和cross join的区别 - This is bill的专属博客 - CSDN博客
http://blog.csdn.net/scythe666/article/details/51881235