Employee
The table contains all employees and their managers are also employees. Each employee has an Id, in addition to a column corresponding to the employee's manager's Id.
+----+-------+--------+-----------+ | Id | Name | Salary | ManagerId | +----+-------+--------+-----------+ | 1 | Joe | 70000 | 3 | | 2 | Henry | 80000 | 4 | | 3 | Sam | 60000 | NULL | | 4 | Max | 90000 | NULL | +----+-------+--------+-----------+
Given a Employee
table, write an SQL query that gets the names of employees who earn more than their managers. In the table above, Joe is the only employee who earns more than his manager.
+----------+ | Employee | +----------+ | Joe | +----------+
mysql script
Create table If Not Exists Employee (Id int, Name varchar(255), Salary int, ManagerId int);
Truncate table Employee;
insert into Employee (Id, Name, Salary, ManagerId) values ('1', 'Joe', '70000', '3');
insert into Employee (Id, Name, Salary, ManagerId) values ('2', 'Henry', '80000', '4');
insert into Employee (Id, Name, Salary, ManagerId) values ('3', 'Sam', '60000', null);
insert into Employee (Id, Name, Salary, ManagerId) values ('4', 'Max', '90000', null);
Use your brain first
Answer:
#自己写的
SELECT
e.`Name` Employee
FROM
employee01 e
LEFT JOIN employee01 ep ON e.ManagerId = ep.Id
WHERE
e.ManagerId IS NOT NULL
AND e.Salary > ep.Salary
#答案
SELECT
a. NAME AS Employee
FROM
Employee01 AS a
JOIN Employee01 AS b ON a.ManagerId = b.Id
AND a.Salary > b.Salary
SELECT
a.name AS Employee
FROM employee01 AS a,employee01 AS b
where a.ManagerId = b.Id
AND a.Salary > b.Salary
Topic source:
https://leetcode-cn.com/problems/employees-earning-more-than-their-managers/description/