leetcode: Employees Earning More Than Their Managers

原题如下:

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可以不用使用表名作为前缀

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值