您的位置:首页 > 其它

leetcode: Employees Earning More Than Their Managers

2015-11-16 14:30 435 查看
原题如下:

Employees Earning More Than Their Managers

 

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      |
+----------+


本题有两种思路,一种是表的自身连接不使用join关键字,另一种是使用join关键字,第二种效率比较高。

第一种代码如下,

SELECT e1.Name
from Employee e1,Employee e2
where e1.ManagerId=e2.Id and e1.Salary>e2.Salary;
表名为Employee,e1和e2分别是为Employee起的别名。

第二种代码如下,

SELECT employer.Name
FROM  Employee employer JOIN Employee manager ON (employer.ManagerId = manager.Id )
WHERE employer.Salary > manager.Salary ;
其中employer和manager也是Employee的别名,与JOIN一起使用的ON表示join的字段。

Mysql还有一个关键字left join,表示不管第二个表中有没有数据都把第一个表中的数据打印出来,leetcode的另一个题目考察了一个用法

题目连接:https://leetcode.com/problems/combine-two-tables/

解答:

select FirstName,LastName,City,State
from Person left join Address on Person.PersonId=Address.PersonId因为不存在重复,所以在select可以不用使用表名作为前缀
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: